4

Entity Framework で異なる出力を返すストアド プロシージャを処理する方法。たとえば、sp では、if 条件と else 条件があります。if 条件は整数を返し、else 条件は datatable を返します。対でエンティティフレームワークを使用してこれを処理する方法。アドバイスしてください。

4

4 に答える 4

3

EF 4.1 以降では、これが可能です。唯一の要件は、SP がそれぞれの場合に何を返すかを知ることです。

私の例では、

DbContext.Database.SqlQuery<TElement>(string sql, params object[] parameters)

このジェネリック メソッドは、具体化に使用する型をジェネリック パラメーターとして受け取ります。また、実行したい SQL 式をパラメータとして取り、そのパラメータを param'd 配列として取ります。

簡略化された SP (入力パラメーターなし) の使用法は次のとおりです。

var res = ctx.Database.SqlQuery<MyResultType1>("dbo.MyStoredProcedure");

foreach (var r in res)
{
    System.Console.Out.WriteLine(
        "col1:{0}; col2:{1}; col3={2}", 
        r.Col1,
        r.Col2,
        r.Col3);
}

したがって、次のことができます。

IEnumerable res
if(...your logic...) 
{
    res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...);
}
else
{
    res = ctx.Database.SqlQuery<MyResultType2>(...your SP call...);
}

このようにして、コレクションに SP 出力結果セットを必要な方法で入力します。

于 2013-06-18T12:46:49.650 に答える
2

[データベースからモデルを更新] をクリックしてストアド プロシージャを選択し、そのプロシージャが関数のインポート (モデル ブラウザー) に追加されていることを確認します。

関数インポートの編集ウィンドウから戻り値を変更できます

そして、実行するだけですdb.myProcedure();

于 2013-06-18T08:54:35.530 に答える
1

Ef4 は、異なる型の複数の戻り値を持つストアド プロシージャをサポートしていません。SQLコードを介してSpを直接呼び出すか、linqでスキーマを実行できます。

それ以外の場合は、EF 4.1 以降を使用する必要があります。

于 2013-06-18T12:21:52.273 に答える
1

例:ストアドプロシージャをドラッグアンドドロップしてから

 db.procedure(element1, element2);

 db.SubmitChanges();
于 2013-06-18T08:50:40.180 に答える