2010-11-27 10 views
7

¿Es posible hacer algo como esto en NHibernate?NHibernate: Obtener objeto de consultas SQL

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

Cuando trato de ejecutar este código me sale:

System.InvalidCastException: No se puede convertir objeto de tipo 'System.Object []' al tipo de producto.

¿O tengo que utilizar el lenguaje de consulta NHibernate?

Respuesta

8

Si usted tiene que utilizar createSQLQuery, puede utilizar el siguiente:

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

le sugiero que utilice mejor ICriteria como en:

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

realidad lo SetResultTransformer no funciona para mí ... Me aparece un mensaje de error que dice : Error - NHibernate.PropertyNotFoundException: No se pudo encontrar un setter para la propiedad 'Fabricante' en la clase Producto .............. (Esto de alguna manera es cierto, ya que no tengo una propiedad Fabricante en el producto de clase, la propiedad se llama ManufacturerName; la asignación XML nhibernate especifica que ManufacturerName prop mapea a la columna de fabricante en la tabla) – MadSeb

+0

en lugar de seleccionar * puede especificar las columnas que desee de la tabla de productos.. De esta manera, SetResultTransformer funcionará. –

+0

@sh_kamalh Especifiqué todas las columnas y todavía tengo el mismo error – Ms01

4

Sí se puede. Salida Entidad consultas utilizando SQL nativo: http://codewut.de/content/using-native-sql-nhibernate

+0

El enlace no funciona más "Este contenido ya no está disponible en Knol". – Liedman

+0

Aquí hay otro. http://codewut.de/content/using-native-sql-nhibernate O simplemente google "Entidad de consultas utilizando SQL Native NHibernate" :) – basarat

Cuestiones relacionadas