簡體   English   中英

將兩個具有FK關系的表插入到一個UoW中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM