2010-07-27 80 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