データベースクエリに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で以前使用していたのと同じ式を使用してすべてを実行する方法を探しています。