我遇到了NHibernate过滤器的问题。它工作得很好,直到我对对象进行左外连接。
例如,Deal引用PurchaseItem,但PurchaseItem已应用了CompanyId过滤器。
如果我想查询左连接到PurchaseItem的处理,则在WHERE子句中应用CompanyId过滤器,导致不返回任何内容。
有没有办法在连接处而不是在where子句中应用过滤器?
答案 0 :(得分:0)
通过使用此过滤条件解决了此问题: “CompanyId为NULL或CompanyId =:companyId”
这没关系,因为在SQLServer中CompanyId不为null,所以如果我们正在进行外连接,我们应该只获取NULL。
答案 1 :(得分:0)
我正在寻找可以为空的可选字段
的确切问题注意你的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