如何在存储过程的结果中映射标识列?

时间:2010-06-02 13:12:26

标签: nhibernate stored-procedures nhibernate-mapping mapping identity-column

我们正在使用NHibernate.Mapping.Attributes来做我们的映射。

为了让NHibernate自动填充数据对象,您似乎需要允许标识列。好的,没问题,我在我的存储过程结果中添加了一个(假的)PK列(它是一个报告查询,所以标识符不需要任何意义,只要它是唯一的)。

我的代码处于一个状态,它在数据对象中返回存储过程的结果,但Id列总是填充-1而不是查询中的实际PK标识(我验证 正确出现)。我正在查看this examplethis example,但我无法弄清楚如何进行Id列映射以使其正确填充列。 (老实说,我不关心列本身,我可以继续操作而不修复此问题,但Id属性必须公开,因此应该返回正确的值 - 任何人阅读回到以后谁有同样的问题可能实际上需要适当的值。)


这是我到目前为止(大规模简化):

存储过程结果:

   Id    FileNumber
    1         10-01
    2         10-02
    3         10-02
    4         10-03

MyReportQuery.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
    <sql-query name="MyReportQuery">
        <query-param name="param1" type="System.Boolean" />

        <return class="MyCompany.Core.Domain.Reports.MyReportDataObject, Core" />

        <![CDATA[
            exec MyReportQuery :param1
        ]]>
    </sql-query>
</hibernate-mapping>

MyReportQuery.cs:

results = session.GetNamedQuery("MyReportQuery")
    .SetParameter<bool>("param1", true)
    .List<MyReportDataObject>();

MyReportDataObject.cs:

namespace MyCompany.Core.Domain.Reports
{
    [Class]
    public class MyReportDataObject
    {
        private int _id = -1;
        private string _fileNumber = null;

        // This is where I need help
        [Id(0, Column = "Id", TypeType = typeof(int))]
        public virtual int Id
        {
            get { return _id; }
            set { _id = value; }
        }

        [Property(Column = "FileNumber")]
        public virtual string FileNumber
        {
            get { return _fileNumber; }
            set { _fileNumber = value; }
        }
    }
}

正如我之前所说,此代码会正确填充数据对象,但Id列除外。我已经尝试搞乱这些属性,但到目前为止还没有任何工作。

任何帮助将不胜感激。直接使用NHibernate.Mapping.Attributes的解决方案会很好,但是如果你能用XML样式的映射解决这个问题,我应该能够翻译它。谢谢!

0 个答案:

没有答案