0

我有以下型号:

public class SomeForm
{
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     public int Id { get; set; }

     public IList<FacilityContactInformation> OriginatingFacilities { get; set; }

     public IList<FacilityContactInformation> DestinationFacilities { get; set; }
}

public class FacilityContactInformation
{
    public FacilityContactInformation()
    {
        Id = -1;
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [MaxLength(50)]
    public string Owner { get; set; }
}

我正在使用自动迁移来生成和重新生成数据库模式。

这会生成错误“外键 'FK_dbo.FacilityContactInformations_dbo.SomeForm_SomeForm_Id '在引用表 'FacilityContactInformations' 中引用了无效列 'SomeForm_Id'。无法创建约束。请参阅以前的错误。

我怀疑根本原因是 EF 尝试为两个列表生成 FK FK_dbo.FacilityContactInformations_dbo.SomeForm_SomeForm_Id

有什么方法可以继续使用自动迁移,但是让它生成一个有效的 FK?看起来 FK 应该包含列表名称并在 FacilityContactInformations 上生成两个属性,或者应该生成一个中间表来加入。

4

1 回答 1

1

当您有 2 个链接到同一个类的导航属性时,您应该覆盖 dbcontext 类的 OnModelCreating 方法。然后将此代码添加到 OnModelCreating 中:

modelBuilder.Entity<SomeForm>
  .Hasmany<FacilityContactInformation>(x => x.OriginatingFacilities);

modelBuilder.Entity<SomeForm>
 .Hasmany<FacilityContactInformation>(x => x.DestinationFacilities);

这是因为如果导航,EF 无法确定正确的键。支柱。链接到同一个类。

于 2013-10-11T21:25:07.360 回答