具有公式属性的实体上的CreateSqlQuery

tec*_*ich 6 nhibernate

当我尝试使用CreateSqlQuery查询表并将其转换为包含公式属性的实体时,我得到以下Adoexception.

"值不能为null.参数名称:fieldName"

首先,是否可以在具有公式映射的实体上使用createsqlquery?

Die*_*hon 7

可以使用CreateSQLQuery公式.

这是一个概念证明.映射(类不难猜):

<class name="Foo">
  <id name="Id">
    <generator class="hilo"/>
  </id>
  <property name="Data"/>
  <property name="DataX2" formula="Data * 2"/>
</class>
Run Code Online (Sandbox Code Playgroud)

这是一个查询:

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>();
Run Code Online (Sandbox Code Playgroud)

如果你仔细观察,你会发现我使用的公式与映射中声明的公式不同.只要查询中包含所有属性,NHibernate就允许任何内容.

我建议你阅读17.1.2.实体查询和以下几点.