2009-01-08 29 views
4

我有一個實體的客戶NHibernate的:通過例如在主鍵查詢產生 「WHERE(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<Customer> GetCustomers(Customer example) 
    { 
     var customers = default(IList<Customer>); 

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

     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? 我在做什麼錯?

P.S.我忘記提及我使用的NHibernate版本。它是2.0.1.GA.

回答

0

如果在示例條件對象的查詢中使用EnableLike()來查詢主鍵的一部分+其他屬性,那麼您的查詢將返回多於一條記錄。例如:用戶的用戶名是主鍵。您的對象的屬性(包括主鍵)被設置爲應該由like運算符查詢的值。在這種情況下,除了編寫自己的查詢方法之外,NHibernate別無選擇。