1

2 つのテーブルを返すストアド プロシージャがあります。MVC のコントローラーからこのストアド プロシージャを呼び出すにはどうすればよいですか。(私はEntity Framework 4を使用しています)


ストアド プロシージャ:

create proc [dbo].[sp_list33](@emp dbo.list READONLY )
as
select * from dbo.Items
select * from dbo.dept

ここで、'list' は、テーブル値パラメーターを渡すためのユーザー定義のテーブル タイプです。

CREATE TYPE [dbo].[list] AS TABLE(
    [eid] [int] NULL,
    [name] [nvarchar](50) NULL,
    [age] [int] NULL
)

コントローラーで:

[HttpPost]
        public JsonResult Onclick(int id)
        {

            using (examemployeeEntities1 eee = new examemployeeEntities1())
            {
                //Create table value parameter
                DataTable dt = new DataTable();
                DataRow dr = dt.NewRow();
                dt.Columns.Add("eid");
                dt.Columns.Add("name");
                dt.Columns.Add("age");
                dt.Rows.Add(1, "john", 21);
                dt.Rows.Add(2, "albert", 22);
                dt.Rows.Add(3, "martin", 33);

                SqlParameter emp1 = new SqlParameter("@emp", SqlDbType.Structured);
                emp1.Value = dt;
                emp1.TypeName = "list";

                //eee.Database.ExecuteSqlCommand("EXEC sp_list4 @emp",emp1);
                var resp = eee.Database.SqlQuery<Item>("exec sp_list33 @emp", emp1);

                return Json(resp.ToList());  
            }
         }

ビュー: 段落 ID は「sdf」で、ボタン ID は「asd」です!!!!!

脚本:

 $("#asd").click(function () {

        var a = 1;
        var content = "<table><th>Id</th><th>Name </th><th>Age</th></tr>";
        $.ajax({
            type: 'POST',
            url: '/Home/Onclick/',
            data: { 'id': a },
            datatype: 'json',
            success: function (data) {
                $.each(data, function (i, item) {
                    content += "<tr>";
                    content += "<td style=\"background-color:White\">" + data[i].eid + "</td>";
                    content += "<td style=\"background-color:White\">" + data[i].name + "</td>";
                    content += "<td style=\"background-color:White\">" + data[i].age + "</td>";
                    content += "</tr>";
                });
                content += "</table>";
                $('#sdf').html(content);
                alert("success");
            },
            error: function () {
            }
        });

    });

Result は Item テーブルのコンテンツのみを表示します。ストアドプロシージャから2つのエンティティを取得するには? 最初の選択ステートメントのみを取得しています。これを解決するのを手伝ってくれる人はいますか..?

4

1 に答える 1

2

EF5 を使用していないため、簡単には進めません

Microsoftがそのリンクで述べたように:

「EF5 より前の Entity Framework では、ストアド プロシージャの呼び出しが許可されていましたが、最初の結果セットのみが呼び出し元のコードに返されていました。」

しかし、常に回避策があります。この手順に従うと、それを達成できるようになります。非常に簡単な解決策ではありませんが。

お役に立てれば

于 2013-05-29T07:06:53.897 に答える