我有一个 NHibernate 映射,如下所示:
<class name="Customer" table="Customer" where="Region=0">
...
</class>
我无法更改此映射而不会对应用程序的其他区域产生严重影响。
有没有一种方法可以查询不在区域 0 中的客户,避免 NHibernate 将 (其中 Region=0)
附加到所有 SQL 查询?
最佳答案
尚未测试,但您可以尝试拦截器:
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 区域的客户。
关于c# - 如何覆盖NHibernate的类映射Where子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18358684/