NHibernate Criteria集合包含。

11

我有一个通过多对多关系映射的父子关系集合。

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

public class Child {}

public class ParentMap : ClassMap<Parent>
{
    HasManyToMany(x => x.Children)
        .AsSet();
}

我该如何编写一个查询语句以选择包含给定子级的所有父级? 我本来想这样做,但是这个API不存在:

Session.CreateCriteria<Parent>()
   .Add(Expression.Contains("Children", child)
   .List<Parent>();

我真的找不到答案。我的大脑今天没有完全运转,Google也无法帮助我。

1个回答

10

这个怎么样?

Session.CreateCriteria<Parent>()
   .CreateCriteria("Children")
   .Add(Expression.Eq("Id", child.Id)
   .List<Parent>();
或者
Session.CreateCriteria<Parent>()
   .CreateCriteria("Children")
   .Add(Expression.In("Id", child.Id)
   .List<Parent>();

所以你可以传入一个 ID 的数组。


是的,我考虑过这个,但在NHibernate中比较ID似乎有些不对。虽然我知道这只是审美问题,但仍然想知道是否有其他方法。 - Stefan Moser
为什么错了?Id 的目的是在数据库中唯一标识您的对象。 - RKitson
1
这就是问题所在,ID的目的是告诉NHibernate如何唯一地标识我的实体,以便我只需处理对象。如果Child是从Parent的一元关系,我会说Expression.Eq("Child", child),并且不会提及ID。我知道我在这里有点挑剔,我只是觉得在Criteria API中存在类似于所有其他实体比较所做的Contains操作。 - Stefan Moser
是的,说得好。使用 Id 对我来说一直都很好用,但我也可能会使用子对象。 - RKitson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接