代码优先多对多表未使用提供的ID列

时间:2019-07-15 11:40:58

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

我正在使用EF6.2.0。

我需要在两个POCO类之间创建多对多关系,但是我需要针对链接添加自定义属性。 因此,我创建了此类作为我的许多链接POCO:

class SampleGroupSpecies
{
    [Key, Column(Order = 0)]
    public int GroupId { get; set; }
    [Key, Column(Order = 1)]
    public int SpeciesId { get; set; }
    public bool IsContaminated { get; set; }

    [Required]
    public virtual Group Group { get; set; }
    [Required]
    public virtual Species Species { get; set; }
}

但是,当EF生成表格时,我得到了:

dbo.SampleGroupSpecies
   Columns
      GroupId (PK, FK, int, not null)
      SpeciesId (PK, int, not null)
      IsContaminated (bit, not null)
      Species_Id (FK, int, not null)

如您所见,它正在创建自己的“ Species_Id”列,并将其用作外键,但这不是我想要的。

我可以很显然添加一个GroupSpeciesId列,将其设置为唯一的[key],这一切都可以像魔术一样工作,但这并不是很好的设计。 / p>

我试图避免使用流利语言,并尽可能使用注释。

有人告诉我我哪里出错了:)

1 个答案:

答案 0 :(得分:1)

这是由于我在Species POCO上错误地设置了导航属性而引起的-并没有将其设置为SampleGroupSpecies的集合,而是将其设置为一个-意味着EF正确地尝试创建一对多关系,但是我正在尝试迫使它无法创建多对多时:)

解决方案是检查两个相关的POCO,以确保将其导航属性设置为集合,而不是单个实例。