实体框架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还没有唯一的约束注释。