NHibernate对左外连接进行过滤
本文关键字:过滤 连接 NHibernate | 更新日期: 2023-09-27 18:11:08
我遇到了一个NHibernate过滤器的问题。它工作得很好,直到我对对象进行左外连接。
例如,Deal引用了PurchaseItem,但是PurchaseItem应用了CompanyId过滤器。
如果我想查询处理到PurchaseItem的左连接,则在WHERE子句中应用CompanyId过滤器,导致不返回任何内容。
是否有一种方法可以在join而不是where子句中应用过滤器?
使用下面的过滤条件修复了这个问题:"CompanyId为NULL或CompanyId =: CompanyId "
这是ok的,因为CompanyId在SQLServer中不是空的,所以我们应该只在做外部连接时得到NULL。
我正在寻找这个可空可选字段的确切问题
请注意您的OR将避免使用索引,因此可能会较慢。
更新:我想我找到了修复:
// register filters
var filterDef = new FilterDefinition(
"f_CurrentTenant",
"TenantId = :f_tenantId",
new Dictionary<string, IType> { { "f_tenantId", NHibernateUtil.Guid } },
**false**);
config.AddFilterDefinition(filterDef);
创建过滤器时,可以设置最后一个参数"useManyToOne"= false。这将告诉NH不要在连接上使用过滤器。
D