2010-07-27 97 views
2

我有一個對象,其中嵌套部分保存在三個表中。這些課程是與IList <>關係的POCO。與任何框架無關。Linq to SQL:更新聚合根

A_object-> B_object[N]-> C_object[N] 

我將此對象發送到存儲庫進行更新。存儲庫使用Linq to SQL保存內容。

myRepo.Update(A_object); 

第一個循環,處理更新和刪除:如果我們的參數對象中找到

foreach (var B in A.B_records) 
{ foreach (var C in B.C_records) 
    { 
     if(C is in our parameter object) 
      // update the database object 
     else 
      // not found, delete the database object 
    } 

    if(B is in our parameter object) 
     // update the database object 
    else 
     // not found, delete the database object 
} 

循環更新數據庫記錄,或者如果我們的參數對象沒有發現刪除的數據庫記錄。因此更新和刪除工作正常。

鑑於我不能修改參數對象的類,**是否有一些模式或機制我可以實現插入缺少B和C對象,而無需再次重新查詢數據庫?

很明顯,我可以創建一個數組找到B和C主鍵,然後在插入循環中跳過它們,但有沒有更好的方式我失蹤?

回答

1

我有一個類似的模式,我在工作。通常情況下,我們做兩件事情之一:

  1. ,在其上不在數據庫之前對象上設置了「是否新款」字段設置爲「真」,或
  2. 設置對象的ID給一些無效的號碼作爲「這是一個新項目」的標誌。
+0

啊,好主意。我知道兩個循環太多了。 – 2010-07-27 18:11:45