[英]Insert new Entity with one to many relationship not creating records in both tables
[英]Insert both two tables with FK relationship in one UoW?
我有以下兩個與FK關系的表。
create table A { Id int primary key identity(1,1), ... }
create table B { AId int reference A(Id), ....}
現在,我需要在A中添加一行,然后在B中添加另一行,這將引用A中新行的Id
。是否可以使用EF 6在一個工作單元中進行操作? 但是,直到調用SaveChanges()
時A的Id
才可用? 兩個插件必須分開嗎?
當然。
僅在通過外鍵基元值添加相關實體時,才需要多個SaveChanges。
如果只想使用一個SaveChanges,則添加根實體,並填充相關實體。 (不僅僅是外鍵,整個相關實體對象)
var tableAEntity = new TableAEntity
{
// set tableA fields
// Name = "blah",
// now set the TableB navigation property reference
TableBEntityField = new TableBEntity
{
// table B fields
}
};
context.TableAEntities.Add(tableAEntity);
context.SaveChanges();
另外,我也不想分散您對當前問題的關注..(人們總是以一些分散注意力的理論來遵循這一說法。..)
工作單位模式並不意味着您不應有多個SaveChanges或任何其他內容。 我發現將上下文抽象到UOW包裝器中顯得不那么直觀和多余,尤其是首先使用EF 6代碼。
相反,我更喜歡在業務層管理器/操作類中注入Context和方法,只需根據需要對其執行多個SaveChanges。 (中間沒有UOW包裝器)
最終,重要的是使業務層中的CustomerManager或CustomerOperation具體類接收Customer Domain模型,並將其內部添加到數據庫中。 調用者通過接口ICustomerManager / ICustomerOperation / ICustomerRepository等工作,並且不知道具體的類如何實現持久性..可以是EF DataContext,LINQ2SQL,ADO.NET等。在這種情況下,具體的類方法可以決定執行多個SaveChanges或span事務等。我發現通過保存一個實體,然后用FK ID等保存另一個實體,此選項更可預測。
就像我說的那樣,關於UOW的觀點可能不盡相同,所以請選擇適合您的空間的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.