ORMLiteと出力パラメータを使用したServiceStack MARS(複数のアクティブな結果セット)

dapper mars ormlite-servicestack servicestack stored-procedures

質問

ServiceStack ORMLiteは素晴らしいですが、私は通常、1:1クラスモデルの代わりにデータベースを構築することが理にかなっているため、データベースを構築することを好むORMの考え方を明らかにしました。それは、私が難しそうに走っているようないくつかのことがありますが、私はそれが単に私の無知であることを確信しています。

最初:

ORMLiteを使用して複数の結果セットを管理する方法はありますか?私はDapperを使用してQueryMultipleメソッドを使用できることを知っていますが、何らかの理由でServiceStackの組み込みDapper実装の使い方を理解しています。

二番目:

ORMLiteを使用してストアドプロシージャコール内の出力パラメータを返す方法はありますか?

理想的には、私はMARSと出力パラメータをクリアして理想的には理想的な世界に住みたいと思っています:)

.NET Framework 4.5、SQL Server 2008 R2、およびServiceStack 3.9.46を使用しています。

受け入れられた回答

これは実際には非常に簡単であることが判明しています(あなたがそれを実現させるための魔法を知っていれば)。

Dapperが剃刀「含まれている」ことを示しているドキュメントと一見誤解を招くような投稿に基づいて、 Dapperは本質的には付属のライブラリの一部であることを暗示していました。

もしあなたが笑うのですが、啓発されていない人たちのために、Dapperの拡張をどのように表示するかを概説します。だからここに魔法がある。

Package Managerコンソールを使用して、以下を実行します。

Install-Package ServiceStack
Install-Package Dapper

サービスに次のusingステートメント(C#)を追加します。

using ServiceStack.OrmLite;
using Dapper;

今度は、あなたがDbオブジェクトを利用するとき、すべてのOrmLiteとDapperメソッドがそこにあります。

出力パラメータを取得するには、次のように簡単になります。

var p = new DynamicParameters();

p.Add("@param1", request.stuff1);
p.Add("@param2", request.stuff2);
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);

Db.Execute("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);

response.outputStuff = p.Get<int>("@param3");

MARSを管理するには(2つの結果セットと出力パラメータを返すSPがあると仮定します):

p.Add("@param1", request.stuff1);
p.Add("@param2", request.stuff2);
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);

var mars = Db.QueryMultiple("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);

//firstSet contains the first result set
var firstSet = mars.Read().ToList();
//secondSet contains the second result set
var secondSet = mars.Read().ToList();

response.outputStuff = p.Get<int>("param3");

一度あなたが魔法を知っていると、それは美しく簡単です:)

ここにはもっと複雑な例があります。

うまくいけば、これは他の誰かを助け、彼らに少しの時間を節約します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow