2012-09-20 15 views
12

Nel tentativo di ottenere alcuni dati con metodo createSQLQuery NH comeNHibernate createSQLQuery

IList<Logistic> LCollection = sess.CreateSQLQuery(@"select * from some_schema.logistic") 
              .SetResultTransformer(Transformers.AliasToBean(typeof(Logistic))) 
              .List<Logistic>(); 

classe logistica è

public class Logistic 
{ 
    public virtual long? l_id { get; set; } 
    public virtual long? carrier_id { get; set; } 
    ... 
} 

mappatura

public class LogisticMap : ClassMap<Logistic> 
{ 
    public LogisticMap() 
    { 
     Table("some_chema.logistic"); 
     Id(x => x.l_id).GeneratedBy.Sequence("some_chema.logistic_sq"); 
     Map(x => x.carrier_id); 
     ... 
    } 
} 

ma ho l'errore

The type System.Decimal can not be assigned to a property of type System.Nullable`1[System.Int64] setter of MyNamespase.Logistic.l_id 

qualsiasi idea di cosa potrebbe essere sbagliato?

+0

controllare se la colonna l_id nel db ha dati decimali – Baz1nga

risposta

23

Un trasformatore AliasToBean viene utilizzato quando si desidera recuperare DTO leggeri anziché entità. (Ad esempio, se si dispone di una schermata panoramica, che visualizza solo alcune informazioni essenziali di ogni entità, allora è meglio utilizzare un DTO e creare una query in NHibernate che utilizza un trasformatore AliasToBean in modo che NH sappia che non dovrebbe recuperare le entità complete).

Se si desidera recuperare le entità utilizzando una query SQL, dovrete fare in questo modo:

var query = sess.CreateSQLQuery(@"select {l.*} from some_schema.logistic as l"); 

query.AddEntity ("l", typeof(Logistic)); 

return query.List<Logistic>();         

Ma, mi chiedo perché ci si vuole utilizzare una query SQL nativo in questo caso ? Perché non utilizzare HQL, ICriteria o QueryOver?

+0

Salvato il mio giorno :) –