2

Я только начинаю с Entity Framework 4.0 и ASP.NET MVC 2 и задаю несколько вопросов относительно использования хранимых процедур и подкачки.Entity Framework 4 - вызов хранимой процедуры выбора/пейджинга

Вы можете сопоставить действия Insert, Update и Delete с хранимыми процедурами, и я уже это сделал. Однако для моего поискового вызова мне нужно отобразить действие «Выбрать».

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

Это приводит к следующему коду ....

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

Моя проблема с этим состоит в том, что он добавляет к глобальной емкости объекта на корневом уровне, а не ContactFormSubmission сущности, как Вставка/обновление и удаление действия.

я предпочел бы что-то вроде этого, но через через хранимые процедуры ...

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

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

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

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

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

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

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

ответ

1

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

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

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

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

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

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