c# – 使用nhibernate时,最优雅的方式来更新子集合(不创建不必要
发布时间:2020-12-15 18:00:49 所属栏目:百科 来源:网络整理
导读:我有一个名为Project的域对象映射到SQL Server数据库中的表.它有一个名为Dependencies的列表属性. public class Project { public int Id; public ListProjectDependency Dependencies; } public class ProjectDependency { public Project Project; public
我有一个名为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)})); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |