Мы используем 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, я смогу перевести его. Спасибо!