2009-06-23 1 views
21

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

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

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

+1

Возможно, вы могли бы привести несколько примеров того, что вы делаете с EF, который «калечит медленно»? Я не нашел EF в большинстве случаев заметно медленнее, если я не делаю то, что приводит к его неэффективности. –

ответ

19

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

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

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

т.е.

var products = context.GetProducts(someproductfilter); 

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

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

т.е.

var categories = context.GetCategoriesForProducts(someproductfilter); 

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

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

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

Надеется, что это помогает

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

+0

Является ли этот ответ актуальным?- Я ищу точно так же, как OP. –

+0

@ KristianNissen вы когда-нибудь узнали, есть ли лучший способ? Было 5 лет, так что, надеюсь, у EF6 есть решение. – Todilo

4

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

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

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

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

+0

благодарит за комментарий – user48545

Смежные вопросы