Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何使用两个或多个与同一子表相关的列表正确构建EF5代码优先模型?_Entity Framework_Ef Code First_Entity Framework Migrations - Fatal编程技术网

Entity framework 如何使用两个或多个与同一子表相关的列表正确构建EF5代码优先模型?

Entity framework 如何使用两个或多个与同一子表相关的列表正确构建EF5代码优先模型?,entity-framework,ef-code-first,entity-framework-migrations,Entity Framework,Ef Code First,Entity Framework Migrations,我有以下型号: public class SomeForm { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public IList<FacilityContactInformation> OriginatingFacilities { get; set; } public IList<FacilityContact

我有以下型号:

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; }
}
某种形式的公共类
{
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共IList发端设施{get;set;}
公共IList目标设施{get;set;}
}
公共课堂设施联系信息
{
公共设施内容信息()
{
Id=-1;
}
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
[MaxLength(50)]
公共字符串所有者{get;set;}
}
我正在使用自动迁移来生成和重新生成数据库架构

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

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


有没有办法继续使用自动迁移,但要让它生成一个有效的FK?FK似乎应该包括列表名并在FacilityContactingFormations上生成两个属性,或者应该生成一个中间表以进行连接。

当您有两个导航属性链接到同一个类时,您应该uld重写dbcontext类的OnModelCreating方法。然后将以下代码添加到OnModelCreating中:

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

modelBuilder.Entity<SomeForm>
 .Hasmany<FacilityContactInformation>(x => x.DestinationFacilities);
modelBuilder.Entity
.有许多(x=>x.原始设施);
modelBuilder.Entity
.Hasmany(x=>x.DestinationFacilities);

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

我仍然不完全“理解”为什么EF不能自己从模型中判断出这一点,但这起到了宣传的效果。谢谢!