代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

linq to sql:更新聚合根目录

  •  2
  • Zachary Scott  · 技术社区  · 14 年前

    我有一个对象,其中嵌套部分在三个表上持久化。这些类是与IList<gt;的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 回复  |  直到 14 年前
        1
  •  1
  •   John Fisher    14 年前

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

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