nhibernate:没有表的类映射

时间:2012-04-28 09:53:40

标签: nhibernate nhibernate-mapping

我有一个实体类,用于表示sql-query的结果。类的映射如下所示。然而据我所知,nhiberate将映射看作是一个真正的数据库表 - 实际上并没有。在这种情况下,数据库中根本没有代表该实体的任何内容。我使用它来映射查询,但视图也是如此。有没有办法向nhibernate表明没有映射表示的表?

<class name="Models.UserTransaction"> <!-- Defaults table name same as Entity even though table doesn’t exist -->
  <id name="Id">
    <column name="Id" not-null="true" unique="true" />
    <generator class="native" />
  </id>
  <property name="TransType" />
  <property name="Date" />
  <property name="Amount" />
  <property name="Balance" />
</class>

这是我映射的查询,它使用用户定义的表。即使我复制的例子出现了,我也无法在没有映射的情况下工作。

  <sql-query name="UserTransactions">
    <query-param name="userId" type="string" />
    <return class="Models.UserTransaction" alias="userTx">
      <return-property name="TransType" column="TransType" />
      <return-property name="Id" column="Id" />
      <return-property name="Date" column="TransDate" />
      <return-property name="Amount" column="Amount" />
      <return-property name="Balance" column="Balance" />
    </return>
    <![CDATA[
      SELECT userTx.[Type] as TransType, userTx.[Id] as Id, userTx.[Date] as TransDate, userTx.[Amount] as Amount, userTx.[Balance] as Balance
      FROM dbo.User_AccountStatement(:userId) userTx
    ]]>
  </sql-query>

2 个答案:

答案 0 :(得分:1)

如果你有一个数据库视图,你可以使用nhibernate映射到那个,但如果你要做的就是存储查询的投影字段,根本不需要是地图。

您如何查询这些数据?

如果您使用条件API,则可以使用resultstransformer将返回的对象数组映射到您的类。类型必须匹配您的类投影。

如果您使用linq提供程序,则可以直接投射到您的班级。所以你有这样的东西

来自Session.Query中的

其中s.some-property ==“some-value” 选择新的你的类型 { some-property-on-your-type = s.some-property, some-other-property-on-your-type = s.some-other-property }

由于您没有映射到数据库中的对象,因此无需编写映射到数据库。

答案 1 :(得分:0)

我想你至少应该指定一个视图作为映射的表名。 视图应该与查询具有相同的结果列(并且希望返回查询可以返回的任何行)

然后你将能够: