7

ServiceStack ORMLite は素晴らしいです。1 対 1 のクラス モデルの代わりにデータベースを構築する方が理にかなっているので、私は通常、データベースを構築することを好む ORM の考え方を避けてきました。そうは言っても、私が困難に直面しているように見えることがいくつかあります。それは単に私の無知が輝いているだけだと確信しています.

初め:

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

2番:

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

理想的には、MARS と出力パラメーターを避けたいと思います。理想的には、理想的な世界に住みたいと思います :)

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

4

1 に答える 1

11

これは非常に単純であることがわかります (それを実現する魔法を知っている場合)。

ドキュメンテーションと、 Dapper がカミソリに「含まれている」ことを示す誤解を招くように見える投稿に基づいて、Dapper が「組み込み」であることが暗示されているとき、それは本質的に含まれているライブラリの一部であると想定しました。

笑ってください。しかし、知識のない私たちのために、Dapper 拡張機能を表示させる方法の概要を説明します。だからここに魔法があります。

パッケージ マネージャー コンソールを使用して、次を実行します。

Install-Package ServiceStack
Install-Package Dapper

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

using ServiceStack.OrmLite;
using Dapper;

これで、Db オブジェクトを活用すると、すべての OrmLite AND 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");

魔法を知ったら、それは美しくシンプルです:)

より複雑な例を次に示します。

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

于 2013-05-28T00:56:29.070 に答える