Как сопоставить столбец идентификаторов в результатах хранимой процедуры? - PullRequest
1 голос
/ 02 июня 2010

Мы используем NHibernate.Mapping.Attributes для наших отображений.

Чтобы заставить NHibernate автоматически заполнять объект данных, необходимо разрешить столбец идентификаторов. Хорошо, нет проблем, я добавил (фальшивый) столбец PK в результаты своей хранимой процедуры (это запрос отчета, поэтому идентификатор не должен ничего значить, пока он уникален).

У меня есть код в состоянии, когда он возвращает результаты хранимой процедуры в объектах данных, но столбец Id всегда заполняется -1 вместо фактического идентификатора PK из запроса (который Я подтвердил, что выходит правильно). Я смотрел на этот пример и этот пример , но я не могу понять, как выполнить сопоставление столбца 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, я смогу перевести его. Спасибо!

...