Entity Framework 4 - Как прочитать несколько наборов записей из хранимой процедуры? - PullRequest
2 голосов
/ 30 августа 2010

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

Например,

    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 (без кодапоколения).

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

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

Таким образом, сохраненный процесс выполняется должным образом, но возвращаются только записи из 1-го оператора выбора, остальные отбрасываются.Поэтому я получаю только 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).

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

Есть идеи?

1 Ответ

4 голосов
/ 30 августа 2010

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

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

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

...