Linq to SQL:更新聚合根

时间:2010-07-27 17:52:12

标签: c# linq-to-sql

我有一个对象,嵌套部分持久存在于三个表中。这些类是具有IList<>的POCO。为了关系。与任何框架无关。

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 个答案:

答案 0 :(得分:1)

我有一个类似的模式,我在工作。通常我们会做两件事之一:

  1. 在以前不在数据库中的对象上设置“IsNew”字段为“true”,或者
  2. 将对象的ID设置为某个无效的数字,作为“这是一个新项目”标志。