我正在尝试在EF Code First中使用“Table Splitting”,当我使用一对多类型的实体关系之一时,它工作正常,但只要我在多对多中使用它我开始得到这个错误:
(27,6):错误3018:从行开始映射片段时出现问题 27:表中的外键约束'Itinerary_Addresses_Target' ItineraryAddress(Address_Id)到表User(Id):表的列 ItineraryAddress映射到AssociationSet Itinerary_Addresses的 结束Itinerary_Addresses_Target但表User的键列是 未映射到对应的EntitySet地址的键 这个结束。
以下是代码(https://github.com/jorgef/tablesplitting):
表格拆分
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Street { get; set; }
public User User { get; set; }
}
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Address>().ToTable("Users");
modelBuilder.Entity<User>().HasRequired(u => u.Address).WithRequiredPrincipal(a => a.User);
一对多关系
public class Itinerary
{
public int Id { get; set; }
public ICollection<Address> Addresses { get; set; }
}
使用之前的代码,一切都像魅力一样,问题在于引入多对多关系
多对多关系
public class Address
{
...
public ICollection<Itinerary> Itineraries { get; set; }
}
添加该关系后,应用程序会在运行时引发上述异常。我设法将生成的edmx保存到磁盘,以防万一有帮助,这里是链接:https://github.com/jorgef/tablesplitting/blob/master/TableSplitting/SavedModel.edmx
如果有人想要使用应用程序的两个版本,一个正在运行,另一个正在运行,我有两个不同的提交:
感谢任何想法或想法。
非常感谢!
答案 0 :(得分:1)
如果其他人遇到此问题:
这是Entity Framework中的一个错误。此错误已修复,升级到EF6将解决问题。有关详细信息,请参阅以下讨论 https://entityframework.codeplex.com/workitem/1385
表格拆分验证的相关错误也已被发现并修复,计划与EF6.1.0一起发布: https://entityframework.codeplex.com/workitem/1611