2

我通常在 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

这是本应如此还是我错过了一些配置?

4

1 回答 1

0

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

您需要创建一个 DetachedCriteria.For < Child >() 而不是接口。

于 2013-12-24T16:22:07.660 回答