C# NHibernate-使用存储过程填充集合
我有一个实体C# NHibernate-使用存储过程填充集合,c#,sql-server,nhibernate,C#,Sql Server,Nhibernate,我有一个实体事务,我正试图用NHibernate中的存储过程检索它的列表。我还想急切地加载一对多关系(实体名称TransactionCategorySplit,Transaction上的属性名称是Splits)。我的sql查询定义如下所示: <sql-query name="GetTransactionsForDownload"> <query-param name="AccountIdentifier" type="Guid"/> <query-p
事务
,我正试图用NHibernate中的存储过程检索它的列表。我还想急切地加载一对多关系(实体名称TransactionCategorySplit
,Transaction
上的属性名称是Splits
)。我的sql查询定义如下所示:
<sql-query name="GetTransactionsForDownload">
<query-param name="AccountIdentifier" type="Guid"/>
<query-param name="StartDate" type="DateTime"/>
<query-param name="EndDate" type="DateTime"/>
<return alias="Transaction" class="Transaction">
<return-property column="Transaction.ID" name="ID" />
<return-property column="Transaction.PostingDate" name="PostingDate" />
<return-property column="Transaction.EffectiveDate" name="EffectiveDate" />
<return-property column="Transaction.Amount" name="Amount" />
<return-property column="Transaction.Balance" name="Balance" />
...etc
</return>
<return-join alias="TransactionCategorySplit" property="Transaction.Splits">
<return-property column="TransactionCategorySplit.Amount" name="Amount" />
<return-property column="TransactionCategorySplit.CreateDate" name="CreateDate" />
<return-property column="TransactionCategorySplit.TransactionCategoryID" name="TransactionCategoryID" />
<return-property column="TransactionCategorySplit.TransactionID" name="TransactionID" />
<return-property column="TransactionCategorySplit.ID" name="ID" />
</return-join>
<![CDATA[
exec core.GetTransactionsForDownload :AccountIdentifier, :StartDate, :EndDate
]]>
</sql-query>
SELECT t.ID AS 'Transaction.ID' ,
t.UserID AS 'Transaction.UserID' ,
t.PostingDate AS 'Transaction.PostingDate' ,
t.EffectiveDate AS 'Transaction.EffectiveDate' ,
t.Amount AS 'Transaction.Amount' ,
t.PrincipalAmount AS 'Transaction.PrincipalAmount' ,
t.InterestAmount AS 'Transaction.InterestAmount' ,
t.EscrowAmount AS 'Transaction.EscrowAmount' ,
t.FeeAmount AS 'Transaction.FeeAmount' ,
t.OtherAmount AS 'Transaction.OtherAmount' ,
t.Balance AS 'Transaction.Balance' ,
...etc
tcs.ID AS 'TransactionCategorySplit.ID' ,
tcs.TransactionID AS 'TransactionCategorySplit.TransactionID',
tcs.Amount AS 'TransactionCategorySplit.Amount' ,
tcs.CreateDate AS 'TransactionCategorySplit.CreateDate' ,
tcs.TransactionCategoryID AS 'TransactionCategorySplit.TransactionCategoryID' ,
tcs.TransactionID AS 'TransactionCategorySplit.TransactionID'
FROM core.Transactions t
LEFT OUTER JOIN core.TransactionCategorySplit tcs ON t.ID = tcs.TransactionID
(where and order by clauses)
当我试图从中得到结果时,我得到了一个奇怪的异常。它是一个系统。IndexOutOfRangeException
,其消息属性为“ID106_1_”。这就好像NHibernate仍然希望它生成的别名出现在结果集中,而且它没有考虑我设置的列
属性。如果我将列别名设置为NH所期望的奇怪的东西,我可以成功地获取数据,但这看起来非常粗糙
sql查询映射是否不正确?如您所见
请注意,存储过程当前只返回标量和实体。
不支持
和
查询有两个不寻常的地方,1)列名应该放在方括号中
[]
而不是文字字符串。2) 不需要where子句周围的括号()
。括号也是占位符。我没有发布与查询无关的部分。单引号在指定别名时工作得很好。既然你这么说了,我记得在文档中读过。谢谢