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 に答える