当我尝试使用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和以下几点。

10-02 06:55
查看更多