2012-05-09 14 views
5

Ho alcune istanze per segnalare dove eseguire sprocs è più semplice e più semplice delle complicate istruzioni di QueryOver.NHibernate - Esegui SQL per popolare DTO

Ho un DTO, non un'entità, che rappresenta i dati restituiti dalla query e desidera popolare i risultati della query nel DTO. Sto usando query denominate e session.GetNamedQuery() per eseguire la query.

  1. Devo creare file di mapping per DTO?
  2. In tal caso, è possibile consentire a NHibernate/FluentNHibernate di non creare tabelle per DTO? I miei test unità cadere e creare lo schema utilizzando lo strumento SchemaExport di NH e non vogliono creare tabelle per il DTO

Si prega di notare che non voglio proiettare una query QueryOver/LINQ utilizzando proiezioni e AliasToBean - ho bisogno per eseguire la stored procedure.

Acclamazioni

risposta

9

Con CreateSQLQuery, quanto riportato di seguito funzionerebbe senza alcun file di mapping. Forse si può fare un tentativo con query denominate:

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

poi

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

Funziona alla grande, ma non funziona per le query denominate poiché nh verifica le classi utilizzate nelle query denominate durante la creazione della configurazione all'avvio e deve conoscere il DTO. Modificherà il codice per usarlo se nessun altro ha una soluzione. Grazie – Chev

2

Se si desidera la soluzione più semplice vi suggerisco di aggiungere nella vostra architettura di un micro/ORM come Dapper per fare questo. È sufficiente rilasciare un single file nel progetto e seguire l'esempio. Per me è la soluzione migliore per accoppiarsi con NH quando devi fare le cose che sono per qualche motivo fuori dalla logica dell'entità.

+0

+1 per Dapper. sembra piuttosto bello. – Chev

+0

@Chev è, è un buon compagno di NH, e dal momento che rimuove un sacco di impianti idraulici NH ha, è alleggerimento veloce. –