2017-05-31 94 views
0

有3个表:实体框架流利的API:复合键 - >循环关系

  • 家长(父母)
  • 儿童(儿童)
  • 一个孩子到另一个(跳跃)的过渡

例如想象书。是书本身,它会是桌子的父母。这本书有页面,儿童。在页面上有脚注 - 到其他页面的链接,它跳转。

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

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

我认为这个结构是合乎逻辑的,直到我试图Udpdate-Database命令时,我得到一个异常:“与检测到的参照完整性约束的循环关系。 这个戒指引用了我最喜欢的桌子跳跃...我真的很喜欢他们的lokalitetu,但是......

请帮我模拟CodeFirst的模型数据以完成此任务(与书籍,页面和页面的脚注)。附测试项目。

Visual Studio项目。 〜10MB。谷歌驱动器:

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

最良好的祝愿, 谢尔盖

+0

我觉得这个问题:

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我是调用context.SaveChanges()

解决问题的项目之前SEED()原因 Jump.ParentId和 Jump.Source.ParentId can(teoreticaly)可以不一样... 可以通过flyent API设置吗? – WSA

回答