您好
这些是类:
public class Child
{
public int Id { get; set; }
public int Name { get; set; }
}
public class Parent
{
public int Id { get; set; }
public IList<Child> Children { get; set; }
}
当我想从收藏中删除一个孩子时,我会写一些类似的东西:
currentParent.Children.Remove(toBeDeletedChild);
问题是当上面的行想要执行时,我会对数据库进行大量查询 它似乎是一个循环,它询问所有的孩子并寻找 像这样的孩子Pseudo:
foreach(child in currentParent.Children)
if(child==toBeDeletedChild)
delete(child);
这意味着我将向数据库收到100个查询,以便从有100个孩子的父母中删除孩子。
我正在使用 NH3 和流利的Nhibernate
父类的映射:
HasMany(p => p.Children)
.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan();
答案 0 :(得分:0)
我会尝试将父更改为
public class Parent
{
public int Id { get; set; }
public ICollection<Child> Children { get; set; }
}
并在 ParentMap
中HasMany(p => p.Children).AsSet()
.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan();
此外,您需要使用HashSet
代替列表进行子集合。