0

データベースクエリにLINQtoNHibernateを使用するアプリケーションを作成しました。ドメインレイヤーのコードは、タイプの式を作成します

System.Linq.Expressions.Expression<Func<T, bool>>

これらはデータアクセス層のリポジトリに渡され、次のように使用されます。

return session.Query<T>.Where(expression)...

NHibernateLINQプロバイダーがマッピングファイルのオプションfetch="join"を完全に無視することを発見する前は、これはすべて素晴らしいことでした。つまり、オブジェクトは、結合を伴う単一のselectではなく、複数のselectステートメントを使用してフェッチされます。

そこで、結合を完全にサポートするQueryOverAPIに移行しようとしています。string.Equalsのようなメソッドがサポートされていないという問題にすぐに遭遇しました。また、式で使用するいくつかのカスタム拡張メソッドがあり、BaseHqlGeneratorForMethodを拡張することでLINQからNHibernateへのサポートを追加しました。

QueryOver APIでこれらのメソッドのサポートを追加するにはどうすればよいですか?これに関する情報が見つかりません。

私はあなたがこのようなことをすることができることを知っています:

Session.QueryOver<T>().WhereRestrictionOn(x=>x.Foo).IsInsensitiveLike("bar")

しかし、LINQtoNHibernateで以前使用していたのと同じ式を使用してすべてを実行する方法を探しています。

4

1 に答える 1

0

答えは、QueryOverAPIでラムダ式を使用することはできないということのようです。Oskarが質問へのコメントで指摘したように、非常に単純なラムダ式のみがサポートされています。リポジトリメソッドがラムダ式ではなくクエリオブジェクトを受け取るようにコードを書き直しています。

于 2013-02-20T13:50:30.593 に答える