我有一个NHibernate映射,如下所示:
<class name="Customer" table="Customer" where="Region=0">
...
</class>
我无法在不严重影响应用程序的其他区域的情况下更改此映射。
有没有办法可以查询不在0区的客户,避免NHibernate在所有SQL查询中附加(where Region=0)
?
答案 0 :(得分:2)
未经测试,但您可以试试拦截器:
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 Region的Customer。
答案 1 :(得分:0)
在您需要来自所有地区的客户的方法中添加OR子句
OR Region <> 0
技术上相当于吸引所有地区的客户。