【发布时间】:2012-05-01 04:55:05
【问题描述】:
我有一个实体类,用于表示 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>
【问题讨论】:
-
如果你不想将你的类映射到数据库,那么..你为什么要映射它? :) 完全删除映射,告诉 nHib 不要映射它,就是这样
-
正如问题所说,我想将其映射到查询结果,例如报告,因此是一种单向(即数据库到应用程序)映射。对于 nhibernate 来说,将其视为双向映射似乎是错误的。
-
查看另一个查询问题,我再次想到了您的问题。您实际上是在为 SQL 查询和 DTO 搜索一些 ResultTransformer 吗? relation.to/Bloggers/…
-
@DaleBurrell:我现在遇到了这个确切的问题。拥有单向映射非常有意义。 ORM 是一个对象关系 Mapper。这并不意味着支持插入、更新和删除。它是一种将关系数据映射到面向对象数据的工具。我真的希望 NHibernate 只允许读取/选择查询结果的映射。我们需要从许多其他表中加载数据,而创建用于生成报告的视图对于我们的场景来说太过分了。
标签: nhibernate nhibernate-mapping