Entity Framework 4 — Как прочитать несколько наборов записей из хранимой процедуры?

У меня есть очень простая хранимая процедура, которая возвращает несколько наборов записей. Все наборы записей имеют псевдонимы столбцов, поэтому все они выглядят одинаково.

E.g.

    SELECT TOP 10 FooId AS Id, Name As Name FROM Foos
    SELECT TOP 10 BarId AS Id, Name As Name FROM Bars
         ...

Для моей настройки EF я использую POCO и имею свой собственный DataContext (без генерации кода).

Теперь я создал «Импорт функции», используя метод, подробно описанный здесь.

Но проблема в том, что создается сложный тип с идентификатором и именем, а не тип, который может содержать несколько наборов идентификатора и имени. Может ли EF не обнаружить, что я возвращаю несколько наборов записей?

Таким образом, сохраненный процесс выполняется правильно, но возвращаются только записи из первого оператора выбора, остальные отбрасываются. Поэтому я получаю только 10 записей.

Вот как я выполняю SPROC в своем пользовательском DataContext:

public ObjectResult<SomeSimpleProc_Result> GetSomeStuff()
    {
        return base.ExecuteFunction<SomeSimpleProc_Result>("SomeSimpleProc);
    }

И результат возврата POCO:

public class SomeSimpleProc_Result
    {
        #region Primitive Properties

        public int Id
        {
            get;
            set;
        }

        public string Name
        {
            get;
            set;
        }

        #endregion
    }

Конечным результатом является то, что я хочу получить объект, в котором есть объекты 0-* (в приведенном выше случае 3 объекта). Каждый объект должен иметь в себе набор простых объектов (Id, Name).

Думаю проблема однозначно с настройкой "Импорт функций". Как мне создать сложный тип? Или я должен использовать «Возвращает коллекцию сущностей».

Любые идеи?


person RPM1984    schedule 30.08.2010    source источник


Ответы (1)


Я думаю, что множественные наборы результатов не поддерживаются из коробки. Здесь — запись в блоге об их использовании в EF v1. EF v4 также не поддерживает их напрямую — комментарии в этом статья содержит следующее утверждение Дэнни Симмонса (раньше он был менеджером разработчиков EF и Linq-To-Sql):

К сожалению, на этот раз мы не смогли получить полную поддержку нескольких результатов в продукте. Однако мы добавили метод Translate в ObjectContext, который позволяет материализовать объекты из DataReader. ...

Изменить: Чтобы немного обновить это: EF 4.5 (.NET 4.5 + VS2012) поддерживает хранимые процедуры с несколькими наборами результатов, но, по крайней мере, в бета-версии казалось, что поддержка не реализована в пользовательском интерфейсе и проверке EDMX. жаловался на некоторые проблемы, но во время выполнения он работал правильно.

person Ladislav Mrnka    schedule 30.08.2010
comment
Ах Ха! Хорошая находка. Итак, похоже, нам нужно вернуться к классическому ADO.NET, чтобы получить наборы результатов. Данг. Та же проблема с обновлением нескольких записей с помощью одной транзакции (необходимо использовать SqlCommand). Ну, по крайней мере, мы знаем. Спасибо. - person RPM1984; 30.08.2010