EF Code First为一个字段创建了两个属性

时间:2017-01-23 21:36:19

标签: c# .net entity-framework

在数据库中,我有两个表 - 显示和语言。表格显示除了其他东西有外键到语言。它的一对多关系(Show有一种语言)。

当我从ADO.NET运行Code First时,实体数据模型为语言字段创建了两个属性:

public class ShowModel
{
    ...
    public LanguageModel Language1 {get; set;}
    public string Language {get; set;}
    ...
}

public class LanguageModel
{
    ...
    public string Language {get; set;}
    ...
}

当我调试样本数据时,DB中的语言字段值被插入到字符串属性中。

问题是 - 为什么会生成这些属性?是因为我可以将Language对象添加到LanguageModel中,但是从DB中,它总是写入字符串1?

修改

modelBuilder.Entity<LanguageModel>()
            .HasMany(e => e.Shows)
            .WithOptional(e => e.Language1)
            .HasForeignKey(e => e.Language);

modelBuilder.Entity<ShowModel>()
            .Property(e => e.Language)
            .IsUnicode(false);

1 个答案:

答案 0 :(得分:0)

如果你暗示这个领域&#39;语言&#39;是&#39; Laguage1&#39;的语言表的外键。导航属性,那么我可以给你一些指示:

  1. 语言表中的键是您的语言属性,但可能未标记为键。除非您将字段ID或其他内容命名,或使用[Key]属性标记,否则EF不会自行解决这个问题。

  2. EF没有看到&#39;语言&#39; field作为外键,但作为另一个标量属性,这将导致Show属性上有2个Language字段。这可以通过告诉ModelBuilder使用正确的导航属性来解决。

  3. 解决否的语法。 2与此类似:

    modelBuilder.Entity<ShowModel>()
      .HasRequired(t => t.Language1) 
      .WithMany(t => t.Shows)
      .HasForeignKey(d => d.Language);