实体框架CTP5,代码优先。通过对象模型帮助创建参考表

时间:2011-01-09 20:14:41

标签: c# entity-framework code-first ef-code-first entity-framework-ctp5

我正在创建新模型,我将让EF为其生成数据库。模型看起来像这样:

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; }
}

我希望Metal是一个带有两列的参考表,“Description”字段是唯一的。相反,EF使用引用模型ID的附加列创建Metal表。有没有一种简单的方法可以通过数据注释或流体API来改变行为?

2 个答案:

答案 0 :(得分:3)

EF认为你在Model&amp; amp;之间有一对多的关系。金属和最简单的建模方法是将Model ID存储在Metal表中。 如果你想保持金属表'干净'(即没有关系数据),那么关系数据必须存储在一个单独的表中,但通过这样做,你也隐含地改变了模型和放大器之间的关系。金属。 如果你真的想要完成这个,那么你可以告诉EF你想要Model&amp;之间的单向多对多关系。金属。 你可以在DbContext的OnModelCreating函数中这样做。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany();
}

答案 1 :(得分:1)

Steven K的答案对于删除Metal表上的外键条目是正确的,但是它不会对Desctiption字段强制执行Unique要求。这不是他的错,但不幸的是,EF Code First还没有唯一的约束注释。