Entity Framework 4 - Вызов хранимой процедуры выбора / пейджинга - PullRequest
2 голосов
/ 06 мая 2010

Я только начинаю с Entity Framework 4.0 и ASP.NET MVC 2 и у меня есть несколько вопросов, касающихся использования хранимых процедур и подкачки страниц.

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

Теперь это единственный / лучший способ сделать это, перейдя в браузер модели, щелкнув правой кнопкой мыши по хранимой процедуре и «Добавление функции импорта» и добавив ее.

В результате получается следующий код ....

var contactFormSubmissions = _entities.ContactFormSubmission_GetContactFormSubmissions(1, 10);

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

Я бы предпочел что-то подобное, но через хранимую процедуру ...

_entities.ContactFormSubmissions.Select<ContactFormSubmission>(string.Empty, pageParam, pageSizeParam);

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

Это меньшая проблема, так как, по крайней мере, все это работает в настоящее время.

Мой следующий вопрос - как лучше реализовать пейджинг с помощью этой функции.

Все примеры, которые я видел о том, как выполнить подкачку с использованием MVC и Entity Framework, использовали LINQ и IQueryable. Есть ли способ использовать IQueryable с отложенной загрузкой и функциями LINQ Пропустить / взять с табличной функцией / sproc?

http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/

PS - любые примеры подкачки в MVC с Entity Framework с использованием SP были бы хорошими!

1 Ответ

1 голос
/ 12 июля 2011

LINQ из коробки не будет переносить хранимую процедуру. Функции Entity Framework - это единственный способ вызвать хранимые процедуры через EF и вернуть объект. Это понятно, поскольку EF знает, что знать, какой параметр отображать ваши переменные подкачки.

Вы бы / никогда не должны были этого делать, но я чувствую себя обязанным (поскольку нет ничего невозможного), чтобы сказать, что вы могли бы написать собственную реализацию LINQ для ваших процедур, но это было бы огромной работой, чтобы аккуратно обернуть пару процедур ,

Некоторые предложения:

  • Вы можете просто использовать linq и пропустить хранимую процедуру
  • Если вы остаетесь с EF, оборачивая хранимую процедуру с помощью функции, вы можете решить проблему многих функций, разбив вашу модель на несколько контекстов
  • Вы можете использовать свойство соединения контекста EF для непосредственного вызова хранимой процедуры и иметь доступный только для чтения (не подключенный к EF) класс модели представления для использования в целях отображения. Поле id (или другого первичного ключа) по-прежнему будет правильным значением для перехода на подробный экран или обратного вызова json для получения редактируемой версии реального объекта EF

Ничто из этого не идеально, но есть множество способов справиться с этим.

...