Как я могу вызвать хранимую процедуру, возвращающую 2 таблицы в контроллере в структуре сущности 4 mvc?

У меня есть хранимая процедура, которая возвращает 2 таблицы. Как я могу вызвать эту хранимую процедуру из контроллера в MVC. (Я использую Entity Framework 4)


Хранимая процедура:

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

Здесь «список» — это определяемый пользователем тип таблицы для передачи табличного параметра.

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());  
            }
         }

В представлении: идентификатор абзаца - "sdf", а идентификатор кнопки - "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. Как получить две сущности из хранимой процедуры? Это только получение первого оператора выбора. Может ли кто-нибудь помочь мне решить эту проблему..?


person neetz    schedule 29.05.2013    source источник
comment
Есть ли способ использовать Entity framework 5?   -  person juanreyesv    schedule 29.05.2013
comment
Извините, это текущая версия, в которой используется Entity Framework 4.   -  person neetz    schedule 29.05.2013
comment
мы не можем использовать это в EF4 ??   -  person neetz    schedule 29.05.2013
comment
обновление, вероятно, будет проще, особенно. если вы используете nuget.   -  person BlackICE    schedule 29.05.2013


Ответы (1)


Поскольку вы не используете EF5, вы не можете пойти простым путем

Как Microsoft заявила в этой ссылке:

«До EF5 Entity Framework позволяла вызывать хранимую процедуру, но возвращала только первый результирующий набор вызывающему коду».

Но всегда есть обходной путь. Подпишитесь на эти шаги и вы сможете этого добиться. Хотя это не очень прямое решение.

Надеюсь это поможет

person juanreyesv    schedule 29.05.2013
comment
Спасибо за приведенную выше ссылку. Вот такую ​​статью я хотел. Но при компиляции приложения в статье показано, что «System.Data.Objects.ObjectContext» не содержит конструктора, который принимает 0 аргументов. - person neetz; 30.05.2013
comment
Не волнуйтесь. Рад, что могу помочь. Я вижу, вы установили расширения EF? code.msdn.microsoft.com/EFExtensions - person juanreyesv; 30.05.2013
comment
Спасибо, я только что разобрался с проблемой сам!! :) - person neetz; 30.05.2013