nhibernate:没有表的类映射
我有一个实体类,用于表示sql查询的结果。下面显示了类的映射。然而,据我所知,nhiberate将映射视为有一个真实的数据库表,而实际上没有。在这种情况下,数据库中根本没有表示此实体的内容。我用它来映射一个查询,但是视图也是如此。是否无法向nhibernate表明映射不表示表nhibernate:没有表的类映射,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有一个实体类,用于表示sql查询的结果。下面显示了类的映射。然而,据我所知,nhiberate将映射视为有一个真实的数据库表,而实际上没有。在这种情况下,数据库中根本没有表示此实体的内容。我用它来映射一个查询,但是视图也是如此。是否无法向nhibernate表明映射不表示表 <class name="Models.UserTransaction"> <!-- Defaults table name same as Entity even though table doesn’
<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>
我想您至少应该指定一个视图作为映射的表名。 视图应具有与查询相同的结果列(并希望返回查询可能返回的任何行) 然后您将能够:
- 将属性映射到视图/SQL查询结果列
- 将类设置为mutable=“false”
- 将查询声明为命名查询(请参阅:)
无需编写到数据库的映射,因为您没有映射到数据库中的对象。如果不想将类映射到数据库,则。。为什么要映射它?:)只需完全删除映射,告诉nHib不要映射它,这就是问题所在,我想将它映射到查询结果,比如报告,所以是单向(即数据库到应用程序)映射。nhibernate将其视为双向映射而不是双向映射,这似乎是错误的。查看另一个查询问题,我再次思考了您的问题。您实际上是在为SQL查询和DTO搜索一些结果转换器吗@我现在遇到了这个问题。使用单向映射非常有意义。ORM是一种对象关系映射器。这并不意味着支持插入、更新和删除。它是一种将关系数据映射到面向对象数据的工具。我真的希望NHibernate允许对查询结果进行只读/选择映射。我们需要从许多其他表加载数据,而对于我们的场景来说,创建一个视图来生成一个报告是过分的。是否命名它并不重要,因为默认值是实体名称。否则你是对的,这正是我所做的,但我的问题是,有没有办法告诉nhibernate这是一个单向映射(见我对我问题的评论),因为nhibernate认为它是双向的,而不是双向的,这似乎是错误的。我在日志文件中观察它为其生成insert语句的过程。最初,它还生成了一个更新,但通过设置mutable=false修复了这一问题,在一个似乎已被删除的答案中建议设置mutable=false。@DaleBurrell:您是否尝试过将id映射转换为具有列映射的简单属性,保持唯一约束,并使用insert=false和update=false(并为所有其他属性重复更新和插入部分)?好的,我编辑了我的问题以表明我使用的是sql查询,如果没有映射,我无法使其工作,但可能这就是我出错的地方?