2

我在让一组实体设置正常工作时遇到了一些麻烦。我在 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,

4

1 回答 1

1

No mapping 错误可能是因为您没有将 Country 实体添加到 DbContext。

在 AccountModels.cs 文件中,您将找到一个派生自 DbContext 的 UsersContext,您必须在其中添加一个DbSet<Country>.

然而,这里还有其他问题。例如,您正在使用 Key 创建 Country 表,EF 默认情况下将为 Country 表提供一个自动生成的标识列。这意味着您不能为 ID 插入值,它将自动生成。

无论如何,Country 可能是一个查找表,您将使用国家值填充它。因此,您可能只需将 CountryId 设置为您想要的国家/地区的值

于 2012-10-12T05:36:32.970 回答