微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用nhibernate时,最优雅的方式来更新子集合(不创建不必要的添加和删除)?

我有一个名为Project的域对象映射到sql Server数据库中的表.它有一个名为Dependencies的列表属性.
public class Project
   {
         public int Id;
         public List<ProjectDependency> Dependencies;   
   }

   public class ProjectDependency
   {
          public Project Project;
          public Project Dependency;
   }

并且我试图找出一个最新的依赖关系列表的更有效的方法,给出一个新的dependencyIds列表.

所以这里是一个天真的实现:

public void UpdateDependencies(Project p,List<int> newDependencyIds)
 {
       p.Dependencies.Clear();
       foreach (var dependencyId in newDependencyIds)
       {
             Project d = GetDependency(dependencyId)
             p.Dependencies.Add(new ProjectDependency{Project = p,Dependency = d});
       }
 }

但这里的问题是,即使没有改变,我正在清除所有项目,并在同样的项目上进行插入.

我正在寻找一种优雅的方式来确定差异(已添加什么,被删除了什么),只是进行这些更改,如果一个依赖关系在之前和之后,那么它不会被触动.

解决方法

public void UpdateDependencies(Project p,List<int> newDependencyIds)
    {
        p.Dependencies.RemoveAll(d => !newDependencyIds.Contains(d.Dependency.Id));
        var toAdd = newDependencyIds.Select(d => p.Dependencies.Any(pd => pd.Dependency.Id != d)).ToList();
        toAdd.ForEach(dependencyId => p.Dependencies.Add(new ProjectDependency{Project = p,Dependency = GetDependency(dependencyId)}));
    }

原文地址:https://www.jb51.cc/csharp/97250.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐