当我尝试使用CreateSqlQuery查询表并将其转换为包含公式属性的实体时,得到以下Adoexception。
“值不能为空。
参数名称:fieldName“
首先,可以在具有公式映射的实体上使用createsqlquery吗?
最佳答案
可以在公式中使用CreateSQLQuery
。
这是概念证明。映射(类不难猜测):
<class name="Foo">
<id name="Id">
<generator class="hilo"/>
</id>
<property name="Data"/>
<property name="DataX2" formula="Data * 2"/>
</class>
这是一个查询:
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>();
如果仔细观察,您会发现我使用的公式与映射中声明的公式不同。 NHibernate允许任何东西,只要所有属性都在查询中即可。
我建议您阅读17.1.2. Entity queries和以下几点。