gpt4 book ai didi

c# - 使用 nhibernate 时更新子集合的最优雅的方法是什么(不创建不必要的添加和删除)?

转载 作者:可可西里 更新时间:2023-11-01 09:10:06 25 4
gpt4 key购买 nike

我有一个名为 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)}));
}

关于c# - 使用 nhibernate 时更新子集合的最优雅的方法是什么(不创建不必要的添加和删除)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com