Nhibernate类级别Where子句被忽略

时间:2012-11-14 02:39:52

标签: nhibernate nhibernate-mapping

我有一个映射到旧数据库表的实体。我想只使用表中的部分结果作为我的域对象。所以我在映射文件中添加了一个类级别Where子句。 源代码如下:

public MyCustomerBaseMap():ClassMapping<MyCustomerBase>
    {
        Table("MyCustomerBase");
        Mutable(true);
        Where("CustomerType = 5");
        ...

    }

代码按预期执行映射,但添加的过滤器 Where customerType = 5 不在生成的SQL中。我尝试使用CustomerizersHoler.AddCustomer方法,但它也没有用。

为了使where子句生效,我还有其他地方需要修改吗?

================= 2012年11月14日更新================= 以下是使用

的查询
public IEnumerable<Request> Search(Criteria<Request> criteria, IList<Guid> customerIds)
        {
            IQueryable<Request> q = from r in Db
                                     where r.State == 0 //active
                                        && customerIds.Contains(r.MyCustomer.Parent.CustomerId)
                                     select r;
            return q.Where(criteria.Predicate);
        }

以下是生成的SQL,我修改了一些表和字段名称,但结构保持不变。我的映射代码实际上比我在这里展示的更复杂。

基本上,每个实体都有一个Base表和Extension表。所以有一个MyCustomerBase类和MyCustomer表。 MyCustomerBase是MyCustomer的超类。 Where子句已添加到MyCustomerBase

的映射文件中
select TOP (10 /* @p0 */) request0_.RequestId            as col_0_0_,
                 request0_.lastupdate as col_1_0_,
                 case
                   when request0_1_.ModifiedOn > request0_.lastupdate then 1
                   else 0
                 end                              as col_2_0_,
                 request0_.lastupdate as col_3_0_,
                 request0_1_.ModifiedOn          as col_4_0_
from   RequestExtension request0_
       inner join Request request0_1_
         on request0_.RequestId = request0_1_.RequestId
       left outer join CustomerExtension mycustomer1_
         on request0_1_.CustomerId = mycustomer1_.CustomerId **--where clause?**
       left outer join Customer mycustomer1_1_
         on mycustomer1_.CustomerId = mycustomer1_1_.CustomerId
where  request0_1_.State = 0 /* @p1 */
       and (mycustomer1_1_.ParentCustomerId in ('ae030101-26c0-de11-823f-0050569e060b' /* @p2 */))
       and (0 /* @p26 */ = 1
             or request0_1_.RequestNumber like ('%' + '307' /* @p27 */ + '%'))
       and cast(case
                  when request0_.lastupdate is null
                        or request0_1_.ModifiedOn > request0_.lastupdate then request0_1_.ModifiedOn
                  else request0_.lastupdate
                end as DATETIME) > '2012-11-13T10:28:32.00' /* @p28 */

案例......因为我传入的标准生成了,这不应该影响结果。

0 个答案:

没有答案