c# - 如何覆盖NHibernate的类映射Where子句?

标签 c# .net vb.net nhibernate nhibernate-mapping

我有一个 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/

相关文章:

c# - Silverlight 组合框空项目高度

c# - .NET 正则表达式中的 (?i) 是什么意思?

vb.net - 在 VB.net 中多行具有多个条件的“If”语句

c# - Java 枚举类型的 C# 等效项是什么?引用下面的代码

c# - Graphics.DrawImage OutOFMemory 异常

c# - 无法通过 DataBoundItem 更新 DataGridView 单元格?

c# - Processcmdkey 中的可访问性不一致错误

c# - 在我的 C# 代码中调用 COM DLL API 的步骤

javascript - ASP.Net web 应用程序 Jquery Photoviewer 和 Ajaxical Update

vb.net - 打开共享 LostFocus 事件处理程序的发送器