Создание приложения WebForms в MVC 3 Entity Framework

#asp.net #asp.net-mvc #entity-framework

#asp.net #asp.net-mvc #entity-framework

Вопрос:

У меня есть небольшое приложение, разработанное в ASP.NET Веб-формы 2.0. В целях обучения я подумываю преобразовать это приложение в MVC 3 Entity Framework. Ниже приведен самый простой пример для имитации моего приложения. Ничего особенного.

Макет приложения:

(изображение должно содержать «поля ввода», а не «файлы»)

введите описание изображения здесь

Архитектура:

введите описание изображения здесь

Ключевые моменты:

  1. Методы на уровне сервиса используют ADO.NET SqlCommand ExecuteReader метод для выполнения хранимых процедур

  2. Большая часть манипуляций и т.д. логика выполняется в хранимых процедурах. Практически никаких манипуляций с данными на уровне сервиса

Теперь я хочу преобразовать это приложение в MVC.

Вопросы:

  1. Какую выгоду я получу (технически), если я конвертирую это приложение в MVC Entity Framework?

  2. Как мне это сделать?

  3. Я просмотрел несколько базовых руководств по MVC3, но все они говорят о EF code-first, который, я думаю, не подойдет в моем случае, поскольку я хочу использовать существующие хранимые процедуры. Это правильно?

Примечание: Я хочу использовать существующие хранимые процедуры. Допустим, у меня нет контроля над изменениями структуры БД.

Обновление 1:

  1. В моем приложении нет ни одного встроенного запроса. Даже самый маленький запрос — это хранимая процедура. Их тонны.

  2. Использование SQL Server и почти нулевые шансы перейти на любую другую базу данных.

Обновление 2:

Мое приложение webforms завершено на 99% и может быть запущено в эксплуатацию в любое время, но из-за некоторых бизнес-препятствий этого не произошло. В то время как я думал, смогу ли я преобразовать (то есть Разработать) это в MVC, я научусь, и, если это сработает, могу запустить live (мой первый MVC) вместо webforms.

Ответ №1:

Прежде чем отвечать на конкретные вопросы, я укажу, что вам, вероятно, следует разделить варианты на 2:

  1. Преобразование уровня представления для использования MVC вместо WebForms.
  2. Преобразование уровня данных для использования EF вместо ADO.NET .

Теперь по вашим вопросам

  1. Преимущества MVC включают лучший контроль над HTML, лучшую тестируемость и т.д. Преимущества EF включают абстрагирование от специфичных для БД вещей (теоретически вы могли бы заменить SQL Server MySQL, предполагая соответствующего поставщика MySQL), Поддержку LINQ и т.д. Конечно, такой переход также сопряжен с издержками.
  2. Разделяй и властвуй. Как говорилось ранее, вам не обязательно делать все сразу. Начните со уровня представления и преобразуйте его в MVC. Помните, что у вас могут быть смешанные приложения WebForms и MVC, чтобы вам не приходилось переводить все свои страницы одновременно. Затем преобразуйте свой уровень данных в EF. Или начните в обратном порядке, в зависимости от того, что имеет смысл для вашего проекта.
  3. [Не эксперт в этой теме] если вы сильно полагаетесь на SPS, тогда рассмотрите традиционный EF. Если у вас всего несколько SPS, то вы могли бы сначала подумать о code обработке SPS с наборами данных (потенциально обернутыми в пользовательские классы), чтобы все заработало, хотя это может усложниться. Как и раньше, вам не нужно переходить на EF, если стоимость слишком высока.

Комментарии:

1. Спасибо. Я немного обновил свой пост, чтобы включить больше информации. Итак, я понимаю, что с точки зрения кодирования или производительности мое приложение не увидит большой разницы. Что меня интересует, так это более чистая разметка и использование синтаксиса Razor. Также я использую UpdatePanels и подумывал о том, чтобы отказаться от работы с кодом и начать использовать jquery ajax, и именно тогда RazorViews кажется многообещающим.

Ответ №2:

Какие преимущества вы получаете? Это совершенно неправильный вопрос. Вы должны спросить, какие у меня проблемы с текущим решением и как эти проблемы будут решены путем замены доступа к данным на EF или уровня представления на ASP.NET MVC?

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

  • Если вы не хотите заменять существующую логику SP обычным способом EF, вы не получите почти никаких преимуществ и не будете изучать EF. EF позволяет использовать хранимые процедуры либо для извлечения отображенных объектов, либо для загрузки пользовательских классов. Сопоставленные объекты обычно представляют либо представления, либо таблицы из базы данных — здесь неясно, хотите ли вы вообще определять какие-либо сопоставленные объекты. Единственное преимущество, которое вы получаете при загрузке пользовательских классов, — это автоматическое заполнение свойств из результирующего набора. Это означает, что вам понадобится класс для каждого результата SP, который будет иметь свойства, названные точно так же, как столбцы в наборах результатов. SPS в EF не поддерживает несколько наборов результатов (по умолчанию), а также не поддерживает автоматическую загрузку отношений.
  • При переходе от ASP.NET Веб-формы для ASP.NET MVC Razor вы можете быть почти уверены, что ни один из ваших интерфейсных кодов не будет использован в новом решении. Вы просто создадите новый проект и выполните интерфейс с нуля.
  • Как описано @marcind, эти два изменения полностью независимы — вы можете делать одно без другого.

Комментарии:

1. Вы сделали хорошее замечание о сопоставлении сущностей с SPS. Я подумал, что мне придется следовать подходу Schema First с EF, поскольку у меня уже есть существующая база данных. При таком подходе мне, возможно, не придется явно создавать свой класс Person (сущности), но я могу положиться на VS в этом. Мне нужно будет больше проверить множественный набор результатов (немногие из моих SPS делают это). В Razor моя главная проблема заключается в том, что у меня есть пользовательские элементы управления, которые взаимодействуют друг с другом. Я знаю, что с Razor у меня может быть PartialView, но я не знаю, как они будут взаимодействовать друг с другом. Спасибо за подсказки.

2. Я рекомендую задать отдельный вопрос о замене пользовательских элементов управления.

3. Если вы хотите проверить какую-либо возможность с возвратом нескольких наборов результатов, проверьте EFExtensions archive.msdn.microsoft.com/EFExtensions