我们正在使用NHibernate.Mapping.Attributes来做我们的映射。
为了让NHibernate自动填充数据对象,您似乎需要允许标识列。好的,没问题,我在我的存储过程结果中添加了一个(假的)PK列(它是一个报告查询,所以标识符不需要任何意义,只要它是唯一的)。
我的代码处于一个状态,它在数据对象中返回存储过程的结果,但Id
列总是填充-1而不是查询中的实际PK标识(我验证 正确出现)。我正在查看this example和this 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样式的映射解决这个问题,我应该能够翻译它。谢谢!