2012-05-09 1285 views
5

Tengo algunas instancias para informar que la ejecución de sprocs es más fácil y más simple que las declaraciones complicadas de QueryOver.NHibernate - Ejecutar SQL para rellenar DTO

Tengo un DTO, no una entidad, que representa los datos devueltos por la consulta y desea completar los resultados de la consulta en el DTO. Estoy usando consultas nombradas y session.GetNamedQuery() para ejecutar la consulta.

  1. ¿Tengo que crear archivos de mapeo para el DTO?
  2. Si es así, ¿es posible que NHibernate/FluentNHibernate sepa que no debería crear tablas para el DTO? Mis unidades de pruebas de caída y crear el esquema utilizando la herramienta SchemaExport de NH y no quieren crear tablas para el DTO

Tenga en cuenta que no quiero proyectar una consulta QueryOver/LINQ utilizando proyecciones y AliasToBean - Necesito para ejecutar el procedimiento almacenado.

Saludos

Respuesta

9

Con CreateSQLQuery, lo siguiente funcionaría sin ningún archivo de mapeo. Tal vez usted puede darle una oportunidad con consultas con nombre:

public class YourDto 
{ 
    public int YourDtoId { get; set; } 
    public string YourDtoTitle { get; set; } 
} 

continuación

var result = yourNhSession 
    .CreateSQLQuery("select yourColumn1 as YourDtoId, yourColumn2 as YourDtoTitle from YOUR_TABLE") 
    .SetResultTransformer(Transformers.AliasToBean<YourDto>()) 
    .List<YourDto>(); 
+0

Esto funciona muy bien, pero no funciona para consultas con nombre, ya que nh verifica las clases utilizadas en las consultas con nombre cuando crea la configuración al inicio y necesita conocer el DTO. Modificará el código para usar esto si nadie más tiene una solución. Gracias – Chev

2

Si quieren la solución más simple que sugiero se agrega en la arquitectura de un micro/ORM como Dapper para hacer esto. Simplemente está soltando un single file en su proyecto y sigue la muestra. Para mí, es la mejor solución asociar a NH cuando tienes que hacer las cosas que por alguna razón fuera de la lógica de la entidad.

+0

+1 para pulcro. parece muy bueno – Chev

+0

@Chev es, es un buen compañero de NH, y ya que elimina una gran cantidad de plomería NH, se está aligerando rápidamente. –