在数据库中,我有两个表 - 显示和语言。表格显示除了其他东西有外键到语言。它的一对多关系(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);
答案 0 :(得分:0)
如果你暗示这个领域&#39;语言&#39;是&#39; Laguage1&#39;的语言表的外键。导航属性,那么我可以给你一些指示:
语言表中的键是您的语言属性,但可能未标记为键。除非您将字段ID或其他内容命名,或使用[Key]属性标记,否则EF不会自行解决这个问题。
EF没有看到&#39;语言&#39; field作为外键,但作为另一个标量属性,这将导致Show属性上有2个Language字段。这可以通过告诉ModelBuilder使用正确的导航属性来解决。
解决否的语法。 2与此类似:
modelBuilder.Entity<ShowModel>()
.HasRequired(t => t.Language1)
.WithMany(t => t.Shows)
.HasForeignKey(d => d.Language);