NHibernate标准集合包含

NHibernate标准集合包含,nhibernate,Nhibernate,我有一个映射了多对多集合的父/子关系 public class Parent { public ISet<Child> Children { get; set; } } public class Child {} public class ParentMap : ClassMap<Parent> { HasManyToMany(x => x.Children) .AsSet(); } 公共类父类 { 公共ISet子项{get;s

我有一个映射了多对多集合的父/子关系

public class Parent
{
    public ISet<Child> Children { get; set; }
}

public class Child {}

public class ParentMap : ClassMap<Parent>
{
    HasManyToMany(x => x.Children)
        .AsSet();
}
公共类父类
{
公共ISet子项{get;set;}
}
公共类子{}
公共类ParentMap:ClassMap
{
HasManyToMany(x=>x.Children)
.AsSet();
}
如何编写查询以选择包含给定子级的所有父级?我会猜它会是这样的,但这个API并不存在:

Session.CreateCriteria<Parent>()
   .Add(Expression.Contains("Children", child)
   .List<Parent>();
Session.CreateCriteria()
.Add(表达式.Contains(“Children”,child)
.List();

我一辈子都找不到答案。今天我的大脑功能不全,谷歌也让我失望了。

像这样的事情怎么样

Session.CreateCriteria<Parent>()
   .CreateCriteria("Children")
   .Add(Expression.Eq("Id", child.Id)
   .List<Parent>();
Session.CreateCriteria()
.CreateCriteria(“子项”)
.Add(Expression.Eq(“Id”),child.Id)
.List();

Session.CreateCriteria()
.CreateCriteria(“子项”)
.Add(表达式.In(“Id”,child.Id)
.List();

所以你可以传入一个Id数组。

是的,我想到了,但是关于在NHibernate中比较Id的一些事情似乎是错误的。我知道这有点像哮喘,所以仍然想知道是否还有其他方法。为什么错了?Id的目的是唯一地标识数据库中的对象。就是这样,Id的目的是告诉NHibernate如何唯一地标识我的实体,这样我就可以处理对象。如果子对象是来自父对象的一元关系,我会说Expression.Eq(“Child”,Child)我知道我在这里吹毛求疵,我只是想在包含的标准API中存在一些东西,可以像所有其他实体比较一样使用。耶,很好的一点。使用ID对我来说一直都很好,但我可能也会使用子对象。
Session.CreateCriteria<Parent>()
   .CreateCriteria("Children")
   .Add(Expression.In("Id", child.Id)
   .List<Parent>();