实体框架CTP5,Code-First。通过对象模型帮助创建参考表
问题描述:
我正在创建新模型,我将让EF为其生成数据库。模型看起来像这样:实体框架CTP5,Code-First。通过对象模型帮助创建参考表
public class Model
{
public int Id { get; set; }
public string StyleNumber { get; set; }
public virtual IList<Metal> Metals { get; set; }
public virtual IList<ModelImage> Images { get; set; }
}
public class Metal
{
public int Id { get; set; }
public string Description { get; set; }
}
我想金属是一个参考表w /两列,“说明”字段是唯一的。相反,EF使用引用模型ID的附加列创建金属表。有没有简单的方法通过数据注释或流体API来改变行为?
答
EF认为您在Model & Metal之间具有一对多关系,并且最简单的方法是将模型ID存储在Metal表中。 如果你想保持金属表'干净'(即没有关系数据),那么关系数据必须存储在一个单独的表中,但通过这样做,你也隐含地改变了金属模型之间的关系。 如果你真的想要这样做,比你可以告诉EF你想要一个模型&金属之间的单向多对多关系。 你可以在DbContext的OnModelCreating函数中这样做。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany();
}
答
Steven K的答案对于删除Metal表上的外键条目是正确的,但是它不会强制描述字段的唯一要求。这并不是他的错,因为不幸的是,EF Code First还没有唯一的约束注释。