2010-11-27 6 views
7

Est-il possible de faire quelque chose comme ça dans NHibernate?NHibernate: Obtenir l'objet par requête SQL

Product GetSpecificProduct() 
{ 
    return session.CreateSQLQuery("SELECT * FROM Products WHERE price = 
     $500").UniqueResult<Product>(); 
} 

Lorsque je tente d'exécuter ce code que je reçois:

System.InvalidCastException: Impossible de jeter l'objet de type 'System.Object []' au type de produit. Ou dois-je utiliser le langage de requête NHibernate?

Répondre

8

Si vous devez utiliser createSQLQuery, vous pouvez utiliser les éléments suivants:

Product GetSpecificProduct() 
{ 
    ISQLQuery query = session.CreateSQLQuery("SELECT * FROM Products WHERE price = $500"); 
    Product p = query.SetResultTransformer(Transformers.AliasToBean<Product>()).UniqueResult<Product>(); 
} 

Je vous suggère de mieux utiliser ICriteria comme dans:

Product GetSpecificProduct() 
{ 
    ICriteria c = session.CreateCriteria(); 
    c.Add(Expression.Eq("Price", 500)); 
    return c.UniqueResult<Product>(); 
} 
+2

en fait la chose SetResultTransformer ne fonctionne pas pour moi ... Je reçois un message d'erreur disant : Erreur - NHibernate.PropertyNotFoundException: Impossible de trouver un setter pour la propriété 'Fabricant' dans la classe Produit .............. (Ceci est en quelque sorte vrai car je n'ai pas de propriété Fabricant dans le produit de classe, la propriété est appelée ManufacturerName, le mappage xml de nhibernate spécifie que ma propriété ManufacturerName correspond à la colonne Manufacturer dans le tableau) – MadSeb

+0

Au lieu de select *, vous pouvez spécifier les colonnes que vous voulez dans la table des produits. De cette façon, SetResultTransformer fonctionnera. –

+0

@sh_kamalh J'ai spécifié toutes les colonnes et j'ai toujours eu la même erreur – Ms01

4

Oui, vous pouvez. Consultez l'entité Requêtes en utilisant SQL Native: http://codewut.de/content/using-native-sql-nhibernate

+0

Le lien ne fonctionne plus. "Ce contenu n'est plus disponible sur Knol." – Liedman

+0

En voici une autre. http://codewut.de/content/using-native-sql-nhibernate Ou juste google "Requêtes d'entité utilisant Native SQL NHibernate" :) – basarat

Questions connexes