3

私はnHibernate ORMを初めて使用します。誰かが私が以下のシナリオを理解/解決するのを手伝ってくれませんか?

getSummaryReportパラメータとして期待されるストアドプロシージャがあり@productIDます。このストアド プロシージャは、複数のテーブルを結合し、要約データを提供します。

nhibernate を使用して、上記のストアド プロシージャから返されたデータをロードする必要があります。nHibernate 経由でストアド プロシージャを呼び出す方法を教えてください。

今私の頭の中を駆け巡っている質問のいくつかは次のとおりです。

  1. マッピング xml は必要ですか? はいの場合、プロパティごとに物理テーブルが必要であることがわかっているため、マッピングxmlに何が続きますか。上記の場合、ストアド プロシージャは新しいオブジェクトを生成しています。

  2. 上記のストアド プロシージャを C# 内から呼び出すにはどうすればよいですか?

ありがとうございました。

4

1 に答える 1

5

これを試してください、あなたのマッピング:-

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <sql-query name="SummaryReport">
    exec getSummaryReport  :productId
  </sql-query>
</hibernate-mapping>

そして SetResultTransformer を使用します...

var results = Session
      .GetNamedQuery("SummaryReport")
      .SetInt32("productId", productId);
      .SetResultTransformer(new AliasToBeanResultTransformer(typeof(YOURCLASS)));
return results.List<YOURCLASS>();

あなたのクラスは:-

public class YOURCLASS 
{
    public virtual int ProductId { get; set; }
    public virtual string Column1Returned { get; set; }
    public virtual int Column2Returned { get; set; }
            etc..
}

YOURCLASS列名とプロパティ名はCASE機密であるため、正確に一致する必要があることを覚えておいて、SP から返されるものが定義されていることを確認してください。

于 2012-04-10T06:37:10.447 に答える