2

我正在创建新模型,让 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 成为带有两列的参考表,“描述”字段是唯一的。相反,EF 使用引用模型 ID 的附加列创建金属表。有没有一种简单的方法可以通过数据注释或流体 API 来改变行为?

4

2 回答 2

3

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

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Model>().HasMany(o => o.Metals).WithMany();
}
于 2011-01-09T21:44:03.713 回答
1

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

于 2011-01-15T19:04:18.200 回答