Используя хранимую процедуру в платформе сущностей, как мне получить сущность, чтобы ее свойства навигации были заполнены? - PullRequest
21 голосов
/ 24 июня 2009

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

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

Есть ли обходной путь?

Ответы [ 2 ]

19 голосов
/ 24 июня 2009

Хорошо хранимые процедуры не сочетаются. Таким образом, невозможно вызвать ваш SPROC и заставить EF автоматически заполнить отношения в одном запросе, используя Include () или что-то в этом роде.

Скажем, у вас есть товары и категории

и у вас есть источник, чтобы получить продукты:

т.е.

var products = context.GetProducts(someproductfilter);

полученным продуктам не будут загружены их категории.

Однако, если у вас есть вторая хранимая процедура, которая получает Категории для указанных продуктов:

т.е.

var categories = context.GetCategoriesForProducts(someproductfilter);

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

Это не идеально, потому что вы делаете более одного запроса, но он будет работать.

Альтернативой является использование EFExtensions . Парень, который написал это, создал возможность писать sprocs, которые загружают больше данных за один раз.

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

Приветствие Alex

5 голосов
/ 17 октября 2015

Я нашел этот вопрос SO при исследовании хранимых процедур (SP) с EF. Я также вижу таких людей, как @KristianNissen и @Todilo, которые спрашивают, есть ли обновление с EF6.

Ответ - да, EF 6 что-то изменил, но ничего не добавил, чтобы помочь загрузить навигационные свойства при использовании SP. Вы также не можете использовать метод .Include () с SP, как было задано в этом SO вопросе .

Единственный способ - написать свой SP, чтобы специально загрузить навигационные свойства. Однако теперь есть хорошая документация Microsoft по использованию SP - см. Query SP и SP, возвращающие несколько наборов результатов .

Для полноты информации внесенное в EF версии 6 разрешение на использование хранимых процедур (SP) для вставки, обновления и удаления - см. статьи Microsoft и Entity Framework Tutotial .

...