【问题标题】:NHibernate Filters on Left Outer Joins左外连接上的 NHibernate 过滤器
【发布时间】:2014-09-16 22:51:54
【问题描述】:
我遇到了 NHibernate 过滤器的问题。在我对对象进行左外连接之前,它的效果很好。
例如,Deal 引用 PurchaseItem,但 PurchaseItem 应用了 CompanyId 过滤器。
如果我想查询与 PurchaseItem 的左连接的交易,CompanyId 过滤器将应用在 WHERE 子句中,不会返回任何内容。
有没有办法在连接处而不是在 where 子句处应用过滤器?
【问题讨论】:
标签:
c#
nhibernate
nhibernate-mapping
filtering
【解决方案1】:
通过使用此过滤条件解决了这个问题:
"CompanyId 为 NULL 或 CompanyId = :companyId"
这没关系,因为 CompanyId 在 SQLServer 中不为空,所以我们应该只在进行外连接时才获得 NULL。
【解决方案2】:
我正在寻找可空可选字段的确切问题
请注意,您的 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