質問

私は通常、nhibernateの剥離布地を使用してインターフェイスを照会します。

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

これは、構成を意図しているものですか、それともいくつかの構成が欠けていますか?

役に立ちましたか?

解決

Nhibernateが照会するつもりの適切な実装クラスを見つけることができないため、この場合はインターフェイスに対してクエリができるとは思いません。たとえば、ChildLightと呼ばれるICHILDの別の実装者(または別のテーブルにマッピングされたもの)があると仮定すると、Nhibernateには取得するクラスの実装がどの方向にもありません。

インターフェイスではなく、<Child>()のためにDetachedcriteria.forを作成する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top