2009-01-08 9 views
4

J'ai une entité ClientNHibernate: Requête par exemple sur la clé primaire produit "WHERE (1 = 1)"

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

et ma méthode DAL est:

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; 
    } 

, mais le problème est que quand je l'appelle ma méthode comme celui-ci

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

J'ai une collection de tous mes clients dans la base de données car NHibernate génère la requête SQL suivante

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

NHibernate prend en charge QBE sur la clé primaire? Qu'est-ce que je fais de mal?

P.S. J'ai oublié de mentionner la version de NHibernate que j'utilise. C'est 2.0.1.GA.

Répondre

0

Et si vous utilisez EnableLike() sur votre requête par l'exemple d'un critère de critère pour interroger une partie de la clé primaire + d'autres propriétés, votre requête retournera plus de 1 enregistrement. Exemple: le nom d'utilisateur d'un utilisateur est la clé primaire. Les propriétés de votre objet, y compris la clé primaire, sont définies sur des valeurs qui doivent être interrogées par un opérateur similaire. Dans ce cas NHibernate ne laisse pas d'autre choix que d'écrire votre propre méthode de requête.

Questions connexes