2017-02-02 3 views
2

はのは、私が弁別(階層ごとのテーブル)でマッピングされた以下の構造を、持っていると言う派生されませんこれについてLinqをNHibernateに使用する:NHibernateはLINQのクエリは、オブジェクト

私は結果を得られません。生成されたクエリを見ているときに私が見に期待:

where type in (1, 2) 

をしかし、その代わりに、私はこれを得た:

where type='animal' 

動物が抽象的であるとさえ弁別を持っていないので、生成されたクエリは無意味です。

少し深く掘り下げて、クエリが内部的にHQLのWHERE x.class=animalに似たものに変換されていることがわかりました。これはLinqのNHibernateのバグですか?それとも期待される行動ですか?

答えて

0

session.Query<Animal>().Select(a => a.yourXEntity).ToList() 

それとも

代わり
session.Query<Animal>().SelectMany(a => a.yourXEntityCollection).ToList() 

を使用しているときに予想される結果を得るのですか?それらは多型を扱うべきです。

あなたのラムダx.Entity is Animalが非常に高い多型を処理し、指定されたクラスの唯一の弁別値を取るしませんHQLx.Entity.class = Animalに翻訳さが、どのそのデフォルトはクラス名。

+0

もし私が 'session.Query .ToList()'を実行すると、予想されるクエリ 'type in(1,2)'が返されます。私があなたの答えで質問をすると、私はそれも動作すると思います。問題は '.Where(x => x.EntityはAnimalです)'のみです。 (x => a.Id).Contains(x.Entity.Id))の代わりに、単純な 'where type in(1,2)の代わりに) 'id(select id from ...)'の中で複雑なサブクエリを取得します。 – AlexDev

1

I がこの機能をNHibernateに追加しました。変更はhereであり、ソースから構築することができます。私はプルのリクエストを出したので、これがすぐに動作することを願っています。

更新mergedでした。次のリリースで利用できるはずです。

関連する問題