2017-05-31 91 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

回答