2

次のような NHibernate マッピングがあります。

<class name="Customer" table="Customer" where="Region=0">
    ...
</class>

アプリケーションの他の領域に重大な影響を与えることなく、このマッピングを変更することはできません。

NHibernate(where Region=0)がすべての SQL クエリに a を追加するのを避けて、リージョン 0 にない顧客をクエリする方法はありますか?

4

2 に答える 2

2

テストされていませんが、 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 を取得しないことに注意してください。

于 2013-08-21T13:54:42.890 に答える
0

すべての地域の顧客を必要とするメソッドに OR 句を追加します

OR Region <> 0

技術的には、すべての地域から顧客を獲得することと同等です。

于 2013-08-21T13:26:43.720 に答える