我有一個NHibernate的映射,看起來像這樣:我如何重寫NHibernate的Class mapping Where子句?
<class name="Customer" table="Customer" where="Region=0">
...
</class>
我不能沒有對應用程序的其他地區造成嚴重影響改變這種映射。
有沒有一種方法可以查詢客戶不在區域0,避免NHibernate將(where Region=0)
附加到所有SQL查詢?
我有一個NHibernate的映射,看起來像這樣:我如何重寫NHibernate的Class mapping Where子句?
<class name="Customer" table="Customer" where="Region=0">
...
</class>
我不能沒有對應用程序的其他地區造成嚴重影響改變這種映射。
有沒有一種方法可以查詢客戶不在區域0,避免NHibernate將(where Region=0)
附加到所有SQL查詢?
添加OR子句中的方法,其中從各地區
OR Region <> 0
這在技術上是等同於以客戶來自各地區的需要的客戶。
未經測試,但你可以給一個嘗試的攔截:
public class SqlRegionInterceptor : EmptyInterceptor, IInterceptor
{
NHibernate.SqlCommand.SqlString IInterceptor.OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
return sql.Replace("Region=0", "Region<>0");
}
}
然後,當您需要檢索您的非地區= 0的客戶:
var interceptor = new SqlRegionInterceptor();
using (var session = sessionFactory.OpenSession(interceptor))
{
var customers = session.QueryOver<Customer>.List();
...
session.Close();
}
複雜打交道時謹慎使用查詢。您可能會很快結束替換不需要的SQL部分。 請注意,這不會以NULL區域檢索客戶。
不確定這可以完成,或者至少使用我試過的'QueryOver'和'HQL'。 Where子句總是附加一個AND運算符。你不能簡單地添加一個'OR'子句。 – lalibi