NHibernate过滤器左外连接

我遇到了一个N​​Hibernate过滤器的问题。 它工作得很好,直到我做一个左外连接到对象。

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

如果我想要查询与PurchaseItem的左连接的处理,则CompanyId筛选器应用于WHERE子句中,从而不会返回任何内容。

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


通过使用此过滤条件解决此问题:“CompanyId是NULL或CompanyId =:companyId”

这是可以的,因为在SQLServer中,CompanyId不是null,因此如果我们正在进行外连接,我们只应该得到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

链接地址: http://www.djcxy.com/p/60991.html

上一篇: NHibernate Filters on Left Outer Joins

下一篇: NHibernate Linq property