我有一个如下所示的 NHibernate 映射:
<class name="Customer" table="Customer" where="Region=0">
...
</class>
如果不对应用程序的其他区域产生严重影响,我无法更改此映射。
有没有一种方法可以查询不在区域 0 中的客户,避免 NHibernate 将 a 附加(where Region=0)
到所有 SQL 查询?
我有一个如下所示的 NHibernate 映射:
<class name="Customer" table="Customer" where="Region=0">
...
</class>
如果不对应用程序的其他区域产生严重影响,我无法更改此映射。
有没有一种方法可以查询不在区域 0 中的客户,避免 NHibernate 将 a 附加(where Region=0)
到所有 SQL 查询?
未经测试,但您可以尝试使用 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 区域的客户。
在需要来自所有地区的客户的方法中添加 OR 子句
OR Region <> 0
从技术上讲,这相当于从各个地区吸引客户。