問題の説明:
入力パラメータを使用してストアド プロシージャを実行しようとしています。ストアド プロシージャは、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
.