Используя хранимую процедуру в платформе сущностей, как я могу получить сущность для заполнения ее свойств навигации?

.net c# entity entity-framework

Вопрос

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

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

Есть ли работа вокруг?

Принятый ответ

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

Так сказать, у вас есть продукты и категории

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

т.е.

var products = context.GetProducts(someproductfilter);

Полученные продукты не будут загружены в свои категории.

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

т.е.

var categories = context.GetCategoriesForProducts(someproductfilter);

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

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

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

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

Ура Алекс


Популярные ответы

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

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

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

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



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow