web-dev-qa-db-ja.com

ストアドプロシージャからのエンティティフレームワークの戻りリスト

Entity Frameworkのストアドプロシージャからintのリストを返そうとしています。

ストアドプロシージャを適切に作成し、Entity Frameworkに追加しました。私はそれを複雑なタイプにバインドしようとしていますが、関数インポートを開くと.

結果セットではなくintのみを返す複合型を自動生成します。

結果セットとしてリストを返すエンティティをインポートする方法を誰かが知っていますか?

14
user4071723

次のサンプルストアドプロシージャを作成して、int値のリストを返します。

CREATE PROCEDURE dbo.GetListOfInt
AS BEGIN
    SELECT *
    FROM 
    (VALUES (42), (4711), (8088), (80286), (80486), (655235)) AS VT(VC)
END

次に、このストアドプロシージャをEFに追加しました.edmxモデルを作成し、この関数インポートを作成しました:

enter image description here

ストアドプロシージャをクエリすると、int値で構成される結果セットが返されることがわかります。したがって、関数のインポートダイアログで戻り値をScalar:Int32のコレクションと定義します。

その後、そのストアドプロシージャを呼び出して、次のような結果を取得できます。

using (testEntities ctx = new testEntities())
{
    ObjectResult<int?> result = ctx.GetListOfInt();

    foreach (int intValue in result.AsEnumerable())
    {
        Console.WriteLine("INT value returned: {0}", intValue);
    }
}
15
marc_s

ストアドプロシージャからリストを取得するだけの場合は、特別なものをマップする必要はありません。

このように呼び出すだけです:

var results = dbContext.Database.SqlQuery<int>("SP_YourSP").ToList();

これはintのリストを返すはずです

20
johnny 5

マップされたクラスのリストを取得したい場合は、これを試してください

var results = dbContext.Database.SqlQuery<youclass>("SP_YourSP").ToList(); 
0
Ruben Zarzuela