我正在尝试在 EF Code First 中使用“表拆分”,当我使用一对多类型的实体关系之一时它工作正常,但是一旦我在多对多关系中使用它,我就开始了收到此错误:
(27,6):错误 3018:从第 27 行开始映射片段时出现问题:从表 ItineraryAddress (Address_Id) 到表 User (Id) 的外键约束“Itinerary_Addresses_Target”:表 ItineraryAddress 的列映射到 AssociationSet Itinerary_Addresses 的 End Itinerary_Addresses_Target 但是表User的key列没有映射到这个End对应的EntitySet Addresses的key。
这是代码(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
如果有人想玩这个应用程序的两个版本,一个工作的和一个不工作的,我有两个不同的提交:
- 表拆分处理一对多关系
- 表拆分不适用于多对多关系
任何想法或想法都会受到赞赏。
非常感谢!