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不能自己从模型中判断出这一点,但这起到了宣传的效果。谢谢!