2

我有一个如下所示的 NHibernate 映射:

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

如果不对应用程序的其他区域产生严重影响,我无法更改此映射。

有没有一种方法可以查询不在区域 0 中的客户,避免 NHibernate 将 a 附加(where Region=0)到所有 SQL 查询?

4

2 回答 2

2

未经测试,但您可以尝试使用 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 区域的客户。

于 2013-08-21T13:54:42.890 回答
0

在需要来自所有地区的客户的方法中添加 OR 子句

OR Region <> 0

从技术上讲,这相当于从各个地区吸引客户。

于 2013-08-21T13:26:43.720 回答