Entity Framework 流畅 API:复合键 -> 循环关系

Entity Framework Fluent API: Composite key -> Circular relationships

有3个table:

比如想像书。就是书本身,就会tableParents。书有页数,Children。在页面上有 footnotes-the 个指向其他页面的链接,它会跳转。

对于Children,我使用复合键(新的{ChildId,ParentId}),因为类比书籍,第1页可以在各种书籍中找到。在现实世界中是字符串的ID,它包含一个代码。

Table 跳跃。它描述了一个脚注。将转换的页面 ID (SourceChildId) 和将转换的页面 ID (TargetChildId)。由于转换发生在同一本书 (Parent) 中,该书使用一个字段作为两个键 — ParentId.

我认为这个结构是合乎逻辑的,直到我尝试 Udpdate-Database 命令,我得到一个异常:"Circular relationships with referential integrity constraints detected." 这个戒指参考了我最喜欢的 table Jumps...我真的很喜欢他们的 lokalitetu,但是....

请帮我为这个任务模拟CodeFirst的模型数据(类比书籍,页面和脚注页面)。附上测试项目。

Visual Studio 项目。 ~10mb。 google 驱动器:

https://drive.google.com/open?id=0B2Je5INk3Cy2bXdfWHZSTm1lUms

最良好的祝愿, 谢尔盖

我解决了这个问题。 2 个变化。

1) 从 Jump 对象引用中脱离出来,只保留属性。设置流畅 Api 喜欢:

modelBuilder.Entity<Child>().HasMany(x => x.JumpsFrom).WithRequired().HasForeignKey(x => new { x.SourceId, x.ParentId });
modelBuilder.Entity<Child>().HasMany(x => x.JumpsTo).WithOptional().HasForeignKey(x => new { x.TargetId, x.ParentId });

2) 在设置 Parent.FirstChildId 之前进入 Seed() 我调用了 context.SaveChanges()

已解决的问题项目: https://drive.google.com/open?id=0B2Je5INk3Cy2aTB4ZVNBZEVfbEE