nhibernate:没有表的类映射

问题描述 投票:0回答:2

我有一个实体类,用于表示 sql 查询的结果。类的映射如下所示。但据我所知,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>
nhibernate nhibernate-mapping
2个回答
1
投票

如果您有数据库视图,则可以使用 nhibernate 来映射到该视图,但如果您所做的只是存储查询的投影字段,则根本不需要映射。

您如何查询这些数据?

如果您使用的是 criteria API,则可以使用 resultstransformer 将返回的对象数组映射到您的类。您的班级之间的类型必须与投影相匹配。

如果您使用 LINQ 提供程序,您可以直接投影到您的类中。所以你会有这样的东西

from s in Session.Query<some-type>
where s.some-property== "some-value"
select new your-type
{
some-property-on-your-type = s.some-property,
some-other-property-on-your-type = s.some-other-property
}

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


0
投票

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

然后您将能够:

© www.soinside.com 2019 - 2024. All rights reserved.