Cuando intento consultar una tabla usando CreateSqlQuery y convertirla en una entidad que contiene la propiedad de fórmula, obtengo la Adoexception a continuación.
"El valor no puede ser nulo. Nombre del parámetro: fieldName "
En primer lugar, ¿es posible usar el createqlquery en la entidad que tiene mapeo de fórmulas?
Respuestas
7 para la respuesta № 1Es posible utilizar CreateSQLQuery
con fórmulas
Aquí hay una prueba de concepto. Mapeo (la clase no es difícil de adivinar):
<class name="Foo">
<id name="Id">
<generator class="hilo"/>
</id>
<property name="Data"/>
<property name="DataX2" formula="Data * 2"/>
</class>
Y aquí hay una consulta:
var foos = session.CreateSQLQuery(
@"
select Id as {foo.Id},
Data as {foo.Data},
Data + Data as {foo.Data2}
from Foo
")
.AddEntity("foo", typeof(Foo))
.List<Foo>();
Si observa detenidamente, verá que estoy usando una fórmula diferente a la declarada en el mapeo. NHibernate permite cualquier cosa siempre que todas las propiedades estén en la consulta.
Te sugiero que leas 17.1.2. Consultas de la entidad y los siguientes puntos.
1 para la respuesta № 2
Después de mucho buscar, encontré lo siguiente
https://issues.jboss.org/browse/JBPAPP-6571
Parece que este es un error real en hibernación que han decidido no solucionar. Hay algunas soluciones. Creo que lo mejor es usar alias para nombres de propiedad. Los alias deben usarse como se documenta aquí:
http://nhibernate.info/doc/nh/en/index.html#querysql-aliasreferences