我通常在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
这是意味着什么,还是我错过了一些配置?
答案 0 :(得分:0)
我认为在这种情况下你不能查询接口,因为NHibernate无法找到你想要查询的正确的实现类。例如,假设您有一个名为ChildLight的IChild的另一个实现者(或者映射到不同表的东西),NHibernate没有指示实现类的检索方向。
您需要创建一个DetachedCriteria.For&lt;孩子&gt;()而不是界面。