在NHibernate中使用子查询的接口

时间:2010-04-21 10:38:52

标签: c# nhibernate subquery detachedcriteria nhlambdaextensions

我通常在NHibernate中使用DetachedCriteria查询接口:

DetachedCriteria crit = DetachedCriteria.For<IParent>();

这很好用。

我现在想为子对象创建一个子查询:

DetachedCriteria subcrit = DetachedCriteria.For<IChild>();

并将其添加到像这样的条件中(有点,p.Child实际上是别名,但我已经简化了)

crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit));

如果我的DetchedCriteria适用于儿童,则此方法有效:

DetachedCriteria subcrit = DetachedCriteria.For<Child>();

但不是它的界面(如上所述)。在那种情况下,我得到一个例外:

NHibernate.MappingException: No persister for: Domain.Name.Space.IChild

这是意味着什么,还是我错过了一些配置?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下你不能查询接口,因为NHibernate无法找到你想要查询的正确的实现类。例如,假设您有一个名为ChildLight的IChild的另一个实现者(或者映射到不同表的东西),NHibernate没有指示实现类的检索方向。

您需要创建一个DetachedCriteria.For&lt;孩子&gt;()而不是界面。