为什么Nhibernate查询整个Collection以删除一个孩子?

时间:2011-03-01 09:13:06

标签: nhibernate c#-4.0 fluent-nhibernate

您好
这些是类:

 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();

1 个答案:

答案 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代替列表进行子集合。