2012-09-20 60 views
12

Im tratando de obtener algunos datos con el metodo createSQLQuery NH comoNHibernate createSQLQuery

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

clase logística es

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

mapeo

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); 
     ... 
    } 
} 

pero tengo el error

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

¿Alguna idea de lo que puede estar mal?

+0

compruebe si su columna l_id ins la db tiene datos decimales – Baz1nga

Respuesta

23

Un transformador AliasToBean se utiliza cuando desea recuperar DTO ligeros en lugar de entidades. (Por ejemplo, si tiene una pantalla de resumen, que muestra solo información esencial de cada entidad, entonces es mejor usar un DTO y crear una consulta en NHibernate que use un transformador AliasToBean para que NH sepa que no debería recuperar las entidades completas).

Si desea recuperar entidades mediante una consulta SQL, que tendrá que hacerlo de esta manera:

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

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

return query.List<Logistic>();         

Pero, me pregunto por qué te gustaría utilizar una consulta SQL nativo en este caso ? ¿Por qué no utilizar HQL, ICriteria o QueryOver?

+0

Me salvó el día :) –

Cuestiones relacionadas