【问题标题】: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

      【讨论】:

        猜你喜欢
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        相关资源
        最近更新 更多