为什么NHibernate逐个删除引用的对象,而不是使用外键?

NOt*_*Dev 5 nhibernate performance one-to-many

我有简单Parent- Child关系,Parent有很多Child的对象,关系是单向的:

public class Parent
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
    public virtual IList<Child> Children { get; set; }
}

public class Child
{
    public virtual int Id { get; protected set; }
    public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

映射关系集级联以AllDeleteOrphan删除Child不再引用的对象Parent:

HasMany(x => x.Children).Cascade.AllDeleteOrphan();
Run Code Online (Sandbox Code Playgroud)

现在我正在清除Child对象列表:

var parent = session.Get<Parent>(1);
parent.Children.Clear();
session.Update(parent);
Run Code Online (Sandbox Code Playgroud)

NHibernate Child按预期删除对象,但它通过从集合中为每个对象发送单独的DELETE查询来执行此操作Child:DELETE FROM Child WHERE Id = ...- 这可能意味着很多查询.

无论如何,它可以很容易地使用单查询做喜欢DELETE FROM Child WHERE ParentId = 1.为什么NHibernate没有使用父外键来清除集合?它似乎知道一切准备这样的查询(哪个外键,什么值等)?

Die*_*hon 2

NHibernate在某些情况下可以并且将会这样做

都解释到这里了