實體框架5.0先使用現有數據庫編碼。使用電動工具對課程進行逆向設計。一切都很好。數據庫有兩個表。一個父母和一個帶外鍵的孩子回到父母身份。 ID都是自動增量的int。我添加了一些父記錄,現在想要將子記錄添加到特定的父母。我能看到的唯一方法是通過在Parents表中搜索名稱或其他屬性並返回ID來找到適當的父ID。然後在添加子項時在外鍵屬性中使用該ID。我不想創造一個新的父母,所以這是將孩子添加到現有父母的唯一方法嗎?所有的互聯網示例似乎添加一個孩子,並添加一個新的父母,而不是添加一個孩子到現有的父母。任何幫助將不勝感激實體框架 - 添加子實體
8
A
回答
22
「朱莉」(萊曼)恰巧是我們的老師之一,當談到英孚。正如她在她的書DbContext中解釋的那樣,在父 - 子關聯,兩個導航屬性(parent.Children,child.Parent)和一個外鍵屬性(child.ParentId)中可以涉及三個屬性。您可以在代碼中設置其中的一個或它們的任意組合。
當EF被觸發以檢測更改(例如,當被調用SaveChanges
)它啓動一個稱爲關係修正,其確保三個屬性將在同步過程。
所以,你有三種選擇,以子實體添加到父:
child.Parent = parentObject
。父對象應該首先從數據庫中獲取。parentObject.Children.Add(child)
。還需要來自數據庫的預先存在的父對象。child.ParentId = parentId
,對此您只需要知道id。您可以按照您的建議獲取Id,但同樣如此,對於您知道的對象不會被刪除,您可以將其保存在某個變量中以在事務中重複使用它。
使用前兩個選項,子對象不需要手動添加到上下文中。 EF足夠了解這是新的。有了第三個選項,它必須在SaveChanges
之前添加到context.Children
。
+0
我已經將此標記爲答案,並且還指出了Pawel的評論,兩者都證實了我的假設,即我需要父實體或至少是父代ID,然後才能添加子代。附:我擁有Julie的所有書籍和例子,它們在學習Entity Framework的過程中提供了巨大的幫助。 – user1626137
相關問題
- 1. 實體框架添加實體也添加子實體
- 2. 實體框架:ObjectSet.AddObject不添加實體?
- 3. 實體框架 - 當添加DbUpdateException實體
- 4. 實體框架添加新的實體
- 5. 實體框架 - 更新實體添加/修改的孩子和孫子實體
- 6. 實體框架在添加
- 7. 實體框架添加所有子實體
- 8. 實體框架6 - 如何添加子實體?
- 9. 實體框架5加實體和子實體與
- 10. 實體框架 - 使用子實體加載實體
- 11. 實體框架插入子實體
- 12. 實體框架:刪除子實體
- 13. 實體框架 - 保存子實體
- 14. 實體框架 - 篩選子實體
- 15. 更新子實體實體框架
- 16. 實體框架計數子實體
- 17. c#實體框架加載實體
- 18. 實體框架加載相關實體
- 19. 實體框架 - 加載嵌套實體
- 20. 實體框架:實體
- 21. 實體框架實體
- 22. 實體框架實體json
- 23. 實體框架 - 延遲加載,加載子實體問題
- 24. 從實體框架中的父實體獲取子實體c#
- 25. 實體框架查詢包含實體集合的子實體
- 26. 實體框架獲取具有子實體的實體
- 27. 實體框架:較大實體的子集實體
- 28. 實體框架DeleteObject子
- 29. 實體框架 - Where子句
- 30. 休眠添加實體子實體ID
要設置相關實體,您可以將導航屬性設置爲父實體或設置外鍵。如果你知道這個ID,並且你沒有父節點就是外鍵。如果您有父對象只需設置導航屬性。如果你不知道該ID,也沒有父對象,你怎麼知道該子實體與哪個父母相關? – Pawel
讓我試一試。假設父實體是老師,我在db中有Bob,Julie和Dave。兒童實體是一個教師與多個班級關係的班級。我想向朱莉添加一個班級,但我沒有她的主要ID,因爲它是幾天前我進入她時自動創建的。那麼,我是否必須搜索教師姓名屬性中的「Julie」並返回她的主ID,然後將其用作新類別外鍵? – user1626137
識別Julie的唯一方法是使用ID。原因是ID始終是唯一的,爲什麼名稱不是。您可以使用像context.Teachers.First(t => t.Name ==「Julie」)這樣的代碼從數據庫中引入實體並使用該ID或引用。沒有其他的方式來建立關係,因爲你不知道如何設置關係。另外請注意,Julie可能在此期間被刪除。 – Pawel