次のような NHibernate マッピングがあります。
<class name="Customer" table="Customer" where="Region=0">
...
</class>
アプリケーションの他の領域に重大な影響を与えることなく、このマッピングを変更することはできません。
NHibernate(where Region=0)
がすべての SQL クエリに a を追加するのを避けて、リージョン 0 にない顧客をクエリする方法はありますか?
次のような NHibernate マッピングがあります。
<class name="Customer" table="Customer" where="Region=0">
...
</class>
アプリケーションの他の領域に重大な影響を与えることなく、このマッピングを変更することはできません。
NHibernate(where Region=0)
がすべての SQL クエリに a を追加するのを避けて、リージョン 0 にない顧客をクエリする方法はありますか?
テストされていませんが、 Interceptor を試すことができます:
public class SqlRegionInterceptor : EmptyInterceptor, IInterceptor
{
NHibernate.SqlCommand.SqlString IInterceptor.OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
return sql.Replace("Region=0", "Region<>0");
}
}
次に、Region=0 以外の顧客を取得する必要がある場合:
var interceptor = new SqlRegionInterceptor ();
using (var session = sessionFactory.OpenSession(interceptor))
{
var customers = session.QueryOver<Customer>.List();
...
session.Close();
}
複雑なクエリを扱う場合は注意して使用してください。不要な SQL 部分をすぐに置き換えてしまう可能性があります。これは、NULL リージョンの Customer を取得しないことに注意してください。
すべての地域の顧客を必要とするメソッドに OR 句を追加します
OR Region <> 0
技術的には、すべての地域から顧客を獲得することと同等です。