Подтвердить что ты не робот

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

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

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

Есть ли работа?

4b9b3361

Ответ 1

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

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

и у вас есть sproc для получения продуктов:

то есть.

var products = context.GetProducts(someproductfilter);

результирующие продукты не будут загружены в категории.

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

то есть.

var categories = context.GetCategoriesForProducts(someproductfilter);

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

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

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

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

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

Ответ 2

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

Ответ: да, EF 6 изменил ситуацию, но ничего не добавил, чтобы помочь загрузить навигационные свойства при использовании SP. Вы также не можете использовать метод .Include() с SP, как было задано в этом вопросе fooobar.com/info/241906/....

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

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