2013-08-21 31 views
2

我有一個NHibernate的映射,看起來像這樣:我如何重寫NHibernate的Class mapping Where子句?

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

我不能沒有對應用程序的其他地區造成嚴重影響改變這種映射。

有沒有一種方法可以查詢客戶不在區域0,避免NHibernate將(where Region=0)附加到所有SQL查詢?

回答

0

添加OR子句中的方法,其中從各地區

OR Region <> 0 

這在技術上是等同於以客戶來自各地區的需要的客戶。

+0

不確定這可以完成,或者至少使用我試過的'QueryOver'和'HQL'。 Where子句總是附加一個AND運算符。你不能簡單地添加一個'OR'子句。 – lalibi

1

未經測試,但你可以給一個嘗試的攔截:

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區域檢索客戶。

相關問題