Nhibernate按顺序排列错误的别名

时间:2013-10-18 07:34:02

标签: c# sql nhibernate orm nhibernate-mapping

我在一个表“Fault”(左侧)和右侧表格中的关联实体“Review”中设置了父子关系。

-------------------------------    -------------------
|Id|Parent|Timestamp|Review_Id|    |Id|Note|Timestamp|
-------------------------------    -------------------

我的hibernate映射看起来像这样:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    namespace="Models" assembly="DataAccess">

  <class name="Fault" table="Fault">
    <cache usage="read-write" />

    <id name="Id">
      <column name="Id" not-null="true" />
      <generator class="guid.comb" />
    </id>

    <many-to-one name="Parent" class="Fault" column="Parent_Id" cascade="all" />
    <one-to-one name="Review" class="Review" property-ref="Fault" />

    <bag name="SubFaults" lazy="true" order-by="Timestamp">
      <key column="Parent_Id" />
      <one-to-many class="Fault" />
    </bag>

    <property name="Timestamp" not-null="false" />
  </class>
</hibernate-mapping>

当我访问SubFaults集合时,我得到一个关于模糊列“Timestamp”的异常。查看生成的查询可以快速显示问题。最后在“ORDER BY Timestamp”中没有使用别名。这导致了非常例外,因为当然机器人表“故障”和“评论”连接在一起,它们都有一个列“时间戳”。当我改变这一行:“”到“”然后一切都很好。但是我需要通过他们的时间戳来订购SubFaults。我做错了什么?

1 个答案:

答案 0 :(得分:1)

在任何情况下,当我们使用数据库引擎关键字时,有用的方法是包装列名。对于SQL Server,它是[]。所以,尝试使用

<property name="Timestamp" column="[Timestamp]" not-null="false" />

还有更多的通用样式,我记得像``这样的符号,但是对于sql server,[]可以完成这项工作