2

我正在尝试在 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

如果有人想玩这个应用程序的两个版本,一个工作的和一个不工作的,我有两个不同的提交:

  • 表拆分处理一对多关系
  • 表拆分不适用于多对多关系

任何想法或想法都会受到赞赏。

非常感谢!

4

1 回答 1

1

如果其他人遇到此问题:

这是实体框架中的一个错误。该错误已得到修复,升级到 EF6 将解决该问题。有关详细信息,请参阅以下讨论: https ://entityframework.codeplex.com/workitem/1385

还发现并修复了一个与表拆分验证相关的错误,计划与 EF6.1.0 一起发布: https ://entityframework.codeplex.com/workitem/1611

于 2013-11-07T23:26:24.620 回答