我正在尝试使用输入参数执行存储过程。从MSSQL 2008 SQL Studio运行时,存储过程正确执行。但是我在使用NHibernate作为命名查询运行时遇到错误。
我在SessionFactory配置时收到错误。 因此我认为我没有正确映射命名查询。
程序名称:CASCADE_POSITIONTEMPLATE_PERMISSIONS
输入参数:PositionTemplateId
存储过程返回一个我想要返回的计数,该计数封装在具有指定属性的PositionTemplateUpdateCascadeResult
类中。
命名查询映射:
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-mapping-2.2"
assembly="StudentVoiceGroups.Entities" namespace="StudentVoiceGroups.Entities" >
<sql-query name="CASCADE_POSITIONTEMPLATE_PERMISSIONS" cacheable="false">
<return class="PositionTemplateUpdateCascadeResult" alias="result">
<return-property name="UpdatedPositionsCount">
<return-column name="UpdatedPositionsCount" />
</return-property>
</return>
exec CASCADE_POSITIONTEMPLATE_PERMISSIONS :PositionTemplateId
</sql-query>
</hibernate-mapping>
以下是我想要退回的课程:
public class PositionTemplateUpdateCascadeResult
{
public int UpdatedPositionsCount { get; set; }
}
当我在MSSQL Studio中执行以下程序时:
EXEC [CASCADE_POSITIONTEMPLATE_PERMISSIONS] 15
我得到以下
如果需要其他任何东西,请告诉我。
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-mapping-2.2"
assembly="StudentVoiceGroups.Entities" namespace="StudentVoiceGroups.Entities" >
<sql-query name="CASCADE_POSITIONTEMPLATE_PERMISSIONS" cacheable="false">
exec CASCADE_POSITIONTEMPLATE_PERMISSIONS :PositionTemplateId
</sql-query>
</hibernate-mapping>
返回类应该是映射到表的实体吗?就我而言,这是一个简单的课程。我认为返回类只是像我们使用ResultTransformer
一样使用。
答案 0 :(得分:1)
您可能没有在HBM文件中正确定义查询。试试这个:
<hibernate-mapping default-cascade="none" xmlns="urn:nhibernate-mapping-2.2"
assembly="StudentVoiceGroups.Entities" namespace="StudentVoiceGroups.Entities" >
<sql-query name="CASCADE_POSITIONTEMPLATE_PERMISSIONS" cacheable="false">
<return alias="result" class="YourNamespace.PositionTemplateUpdateCascadeResult, YourNamspaceAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<return-property name="UpdatedPositionsCount" column="UpdatedPositionsCount" />
</return>
exec CASCADE_POSITIONTEMPLATE_PERMISSIONS @PositionTemplateId=?
</sql-query>
</hibernate-mapping>
它应该有用,因为我在答案to this SO question.
中使用了类似的东西编辑:对于 返回 元素,请确保您具有完全限定的返回类型(这包括具有正确版本号的完全限定的程序集名称)。