左外连接上的NHibernate过滤器

时间:2011-10-13 21:41:23

标签: c# nhibernate nhibernate-mapping filtering

我遇到了NHibernate过滤器的问题。它工作得很好,直到我对对象进行左外连接。

例如,Deal引用PurchaseItem,但PurchaseItem已应用了CompanyId过滤器。

如果我想查询左连接到PurchaseItem的处理,则在WHERE子句中应用CompanyId过滤器,导致不返回任何内容。

有没有办法在连接处而不是在where子句中应用过滤器?

2 个答案:

答案 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