我在让一组实体设置正常工作时遇到了一些麻烦。我在 VS2012 中针对 SQL Server 2008 R2 Express 使用 EF v5。
生成的数据库似乎一切都正确,但我没有成功写入某些表。
我有一个UserProfile
对象定义如下:
[Table("UserProfile")]
public class UserProfile
{
[Key]
public long UserId { get; set; }
[StringLength(56)]
public string UserName { get; set; }
public Country Country { get; set; }
...
}
我还Country
定义了如下实体:
[Table("Country")]
public class Country
{
[Key]
public int Id { get; set; }
[StringLength(2)]
public string CountryCode { get; set; }
[StringLength(100)]
public string CountryName { get; set; }
public ICollection<UserProfile> UserProfiles { get; set; }
...
}
生成的列在数据库中看起来是正确的,如果我编写它看起来不错:
ALTER TABLE [dbo].[UserProfile] WITH CHECK ADD CONSTRAINT [UserProfile_Country] FOREIGN KEY([Country_Id])
REFERENCES [dbo].[Country] ([Id])
GO
仅出于在控制器操作中进行测试的目的,我有以下内容:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new
{
Country = new Country { Id = 223, CountryCode = "UK", CountryName = "UK" },
...
});
执行此WebSecurity
方法时,我收到以下错误:
不存在从对象类型 MyApi.Data.Entities.Country 到已知托管提供程序本机类型的映射。
我尝试设置一个配置文件来指定代码和数据库中的关系,但它仍然不友好。
配置看起来像:
public class CountryEntityConfig : EntityTypeConfiguration<Country>
{
public CountryEntityConfig()
{
this.HasMany(x => x.UserProfiles)
.WithRequired()
.HasForeignKey(FKey => FKey.Country);
}
}
在国家对象中列出个人资料列表感觉真的很奇怪,我的一些基础知识完全错了吗?任何输入表示赞赏。
编辑:
在我现在拥有的用户配置文件中,我修改了一些课程并进行了一些更改:
public int CountryId { get; set; }
public virtual Country Country { get; set; }
国家.cs
public class Country
{
public int CountryId { get; set; }
[StringLength(2)]
public string CountryCode { get; set; }
[StringLength(100)]
public string CountryName { get; set; }
public virtual ICollection<UserProfile> UserProfiles { get; set; }
}
并且数据库现在在 UserProfile 表中包含两个 CountryId 相关字段,这些字段与 Country 表有关系,我仍然收到原始错误消息。
TIA,