代码之家  ›  专栏  ›  技术社区  ›  Tom Glenn

存储过程的正确NHibernate映射?

  •  1
  • Tom Glenn  · 技术社区  · 16 年前

    更新:这个问题现在解决了,请参阅下面的答案。


    我在试图找出编写NHibernate映射文件()的正确方法时遇到了一些问题。hbm.xml文件)对于MSSQL存储过程。

    存储过程接受两个参数并返回一个单行结果集,该结果集包含多个具有整数值的列。

    我的映射文件如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="TestApp.DataAccess"
                       namespace="TestApp.DataAccess.Models">
    
      <class name="MonthlyInstructionCount" lazy="true">
        <id name="Id" column="Month">
          <generator class="native" />
        </id>
    
        <property name="Month" />
        <property name="MapRequests" />
        <property name="Instructions" />
        <property name="DrainsLookSee" />
        <property name="DrainsFullCctv" />
        <property name="Soils" />
        <property name="Roots"/>
        <property name="Arb" />
    
        <loader query-ref="MI_MonthlyInstructionCount"/>
      </class>
    
      <sql-query name="MI_MonthlyInstructionCount">
        <return class ="MonthlyInstructionCount">
          <return-property name="Month" column="Month" />
          <return-property name="MapRequests" column="MapRequests" />
          <return-property name="Instructions" column="Instructions" />
          <return-property name="DrainsLookSee" column="DrainsLookSee" />
          <return-property name="DrainsFullCctv" column="DrainsFullCctv" />
          <return-property name="Soils" column="Soils" />
          <return-property name="Roots" column="Roots" />
          <return-property name="Arb" column="Arb" />
        </return>
        exec dbo.MI_MonthlyInstructionCount :StartDate :NumberOfMonths
      </sql-query>
    
    </hibernate-mapping>
    

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="TestApp.DataAccess"
                       namespace="TestApp.DataAccess.Models">
    
      <sql-query name="MI_MonthlyInstructionCount">
        <return class ="MonthlyInstructionCount" />
        exec dbo.MI_MonthlyInstructionCount :StartDate :NumberOfMonths
      </sql-query>
    
    </hibernate-mapping>
    

    两者似乎都不起作用。。。我只得到以下错误:

    'TestApp.DataAccess.Sql测试.NHibernateHelper' 引发了异常。

    {miu MonthlyInstructionCount}}

    非常感谢您的帮助!干杯!

    1 回复  |  直到 13 年前
        1
  •  3
  •   Tom Glenn    13 年前

    断然的: 我现在已经解决了这个问题。首先是ID属性被设置为“name=ID”而不是“name=Month”的问题。其次,我必须将exec命令包装在CDATA中,并在参数之间放置逗号分隔符。下面是完整的工作映射文件,供以后遇到类似问题的人参考。

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="TestApp.DataAccess"
                       namespace="TestApp.DataAccess.Models">
    
      <class name="MonthlyInstructionCount" lazy="true">
        <id name="Month">
          <generator class="native" />
        </id>
    
        <property name="MapRequests" />
        <property name="Instructions" />
        <property name="DrainsLookSee" />
        <property name="DrainsFullCctv" />
        <property name="Soils" />
        <property name="Roots"/>
        <property name="Arb" />
    
        <loader query-ref="MI_MonthlyInstructionCount"/>
      </class>
    
      <sql-query name="MI_MonthlyInstructionCount">
        <return class="MonthlyInstructionCount">
          <return-property name="Month" column="Month" />
          <return-property name="MapRequests" column="MapRequests" />
          <return-property name="Instructions" column="Instructions" />
          <return-property name="DrainsLookSee" column="DrainsLookSee" />
          <return-property name="DrainsFullCctv" column="DrainsFullCctv" />
          <return-property name="Soils" column="Soils" />
          <return-property name="Roots" column="Roots" />
          <return-property name="Arb" column="Arb" />
        </return>
        <![CDATA[ 
        exec MI_MonthlyInstructionCount :StartDate, :NumberOfMonths
        ]]>
      </sql-query>
    
    </hibernate-mapping>
    

    干杯!