当前位置:  开发笔记 > 编程语言 > 正文

NHibernate:在主键上按示例查询产生"WHERE(1 = 1)"

如何解决《NHibernate:在主键上按示例查询产生"WHERE(1=1)"》经验,为你挑选了1个好方法。

我有一个实体客户

public class Customer
{
    public virtual int ID { get; set; }
    public virtual string Firstname { get; set; }
    public virtual string Lastname { get; set; }
}

我的DAL方法是:

    public IList GetCustomers(Customer example)
    {
        var customers = default(IList);

        using (var sessiong = GetSession())
        {
            customers = sessiong.CreateCriteria(typeof(Customer))
                .Add(Example.Create(example))
                .List();
        }

        return customers;
    }

但问题是,当我这样调用我的方法时

    var exemple = new Customer() { ID = 2 };
    var customers = provider.GetCustomers(exemple);

我拥有数据库中所有客户的集合,因为NHibernate生成以下SQL查询

NHibernate: SELECT this_.CustomerId as CustomerId0_0_, this_.Firstname as Firstname0_0_, this_.Lastname as Lastname0_0_ FROM Customers this_ WHERE (1=1)

NHibernate支持主键上的QBE?我究竟做错了什么 ?

PS我忘了提到我正在使用的NHibernate版本.这是2.0.1.GA.



1> zihotki..:

"通过示例使用查询时将忽略ID.这样做是因为具有id设置的示例对象无论如何都只返回一个对象." - http://forum.hibernate.org/viewtopic.php?t=927063和http://forum.hibernate.org/viewtopic.php?p=2351666&sid=c22d2c37f8d67e268b6ffe547f57ad9e
这是针对Hibernate的.NHibernate从它移植过来.所以我确信这也是NHibernate的设计.所以在id上使用Get代替QBE.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有