1. ホーム
  2. sql-server

[解決済み] Dapper.NETと複数の結果セットを持つストアドプロキュア

2023-04-20 20:02:50

質問

複数の結果セットを返すストアドプロックで、Dapper.NETを使用する方法はありますか。

私の場合、最初の結果セットは1つのカラムを持つ1つの行で、もしそれが 0 であれば、呼び出しは成功し、2番目の結果セットにはその実際の行/列のデータが含まれます。(もしそれが0でなければ、エラーが発生し、2番目の結果セットは提供されません)。

Dapper.NETでこれを処理する可能性はありますか?これまでのところ、私は単一の 0 - だけで、それ以上のものはありません。

更新しました。 OK、うまくいきました - 結果セットNo.2が単一のエンティティである限り。

Dapper.SqlMapper.GridReader reader = 
    _conn.QueryMultiple("sprocname", dynParams, 
    commandType: CommandType.StoredProcedure);

int status = reader.Read<int>().FirstOrDefault();
MyEntityType resultObj = reader.Read<MyEntityType>().FirstOrDefault();

さて、私は さらに別の の要件があります。

Dapperのマルチマッピング(SQL Serverから返された1つの行を2つの別々のエンティティに分割する)は、その2番目の結果セットに対して、今のところサポートされていないようです(少なくとも、オーバーロードの .Read<T> のオーバーロードはないようです)。

どうすれば、その行を2つのエンティティに分割できますか?

どのように解決するのですか?

あなたは QueryMultiple メソッドを試しましたか? そのはずだと書いてあります。

複数の結果セットを返すコマンドを実行し 複数の結果セットを返すコマンドを実行し、それぞれにアクセスする 順番にアクセスする

QueryMultipleを有効にするために、このusingステートメントを追加する必要があります。

using Dapper; /* to add extended method QueryMultiple public static GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null); */