Asp.net Mvc:Создание классов моделей с помощью LINQ to SQL

StackOverflow https://stackoverflow.com/questions/1217896

  •  10-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь научиться Asp.net Mvc, поэтому я пытаюсь это Учебник.

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

Использование LINQ to SQL в классе контроллера затрудняет переключение технологий доступа к данным в будущем.Например, вы можете решить переключиться с использования Microsoft LINQ на SQL на использование Microsoft Entity Framework в качестве технологии доступа к данным.В этом случае вам нужно было бы переписать каждый контроллер, который обращается к базе данных в вашем приложении.

Примечание:Я никогда по-настоящему не понимал, как работает интерфейс до прочтения этого руководства, и это все еще не понятно на 100%.Теперь я рассматриваю это как своего рода "шаблон" для класса.

После успешного использования Linq to Sql я подумал, что было бы неплохо попробовать Ado.net Entity Framework, поскольку я много читал об этом.Они сказали, что использование шаблона репозитория упростит переключение, поэтому я решил это протестировать.

Мой вопрос заключается в следующем: что я должен сделать, чтобы перейти на Ado.net EF?

Это то, что, я думаю, я должен сделать.

  • Добавьте файл Movie.edmx и настройте его (добавьте мою таблицу фильмов).
  • Напишите новый класс на основе IMovieRepository и, возможно, назовите его MovieEFRepository.
  • Измените параметр в конструкторе контроллера на MovieEFRepository.Это первое, что я нахожу странным, потому что в руководстве говорится, что отказ от использования репозитория вынудит вас сменить все контроллеры, если вы перейдете на другой источник данных.Разве мне все равно не нужно менять каждый контроллер, поскольку я указываю класс MovieRepository?
  • Последняя корректировка, которую, я думаю, мне нужно сделать, - это изменить вид.Потому что он использует класс Product, который был создан Linq to Sql designer.Я не уверен, как я собираюсь это сделать.Я предполагаю, что я должен был использовать какой-то объект, который не зависел от файла dbml?

Простите меня, если у меня несколько упрощенный взгляд на Asp.net Mvc.Я веб-дизайнер с большим интересом к Asp.net веб-разработке.

Это было полезно?

Решение

Возможно, ваш репозиторий был отделен из-за внедрения, а не в том случае, если вы следовали только примерам из-за

public MoviesController() : this(new **MovieRepository**())

Я рекомендую вам прочитать о IOC, это легко и очень интересно, вы можете использовать и контейнер ioc, такой как castle windsor.

При этом ваш contoller будет иметь только один конструктор, тот, у которого есть интерфейс, и его не нужно будет менять.

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

Если вы не сделаете этого, ваше право, вам нужно будет изменить все, что вы сказали.

Я надеюсь, что это поможет!извините за мой английский!

Другие советы

Итак, после нескольких дней чтения и долгих поисков в Google у меня получилось.Сначала я попытался выяснить, что на самом деле означает IoC (Инверсия контроля).

Одним из первых сайтов, которые я нашел, был сайт со скринкастом о Unity.Который является фреймворком DI / IoC для .Net.

Глядя на это сейчас, это на самом деле очень хороший скринкаст и пример того, как легко использовать Unity и IoC / DI.В то время я не совсем понимал это, поэтому продолжал искать в Google.

Один веб-сайт, на который я постоянно натыкался, был от Мартина Фаулера.

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

Следующий веб-сайт, который я прочитал, был о Виндзорском замке, поскольку Альфредо Фернандес сказал, что им легко пользоваться.

Документация была неплохой, но у меня возникли некоторые проблемы с преобразованием их базового примера "начало работы" в мое приложение Asp.net Mvc.Кроме того, части 2 и 3 отсутствовали при их начале работы.

После этого я начал искать различные фреймворки, чтобы посмотреть, смогу ли я найти действительно простой пример.Если бы я просто еще раз просмотрел первый скринкаст, я бы исправил его намного раньше, но каким-то образом я потерял его из виду.

У меня было много проблем с файлами конфигурации xml, и, похоже, я не мог заставить их работать.Я пробовал Windsor, Structure Map и Spring.net но я всегда застревал с XML-файлами.

Итак, я решил зайти на сайт Asp.net Mvc, потому что именно там я начал изучать Asp.net Mvc.Первые скринкасты и презентации MIX09 показались мне очень понятными, и я понял большую часть того, о чем говорили люди.Я застрял на втором скринкасте Роба Конери при создании приложения Storefront.Поскольку теперь я знал немного больше о репозитории и IOC / DI, я подумал, что было бы неплохо снова начать смотреть скринкасты Роба Конери.В одном из скринкастов он рассказывает о загрузке всех сэмплов в codeplex.

Я зашел на codeplex и обнаружил, что вы можете просматривать исходные файлы, не загружая их.Я попытался выяснить, как Роб Конери обрабатывает IOC / DI со своими репозиториями.Поэтому я был рад видеть, что он использовал Structure Map, но вместо использования файла конфигурации xml он использовал класс bootstrapper, который регистрирует все интерфейсы в их конкретном классе.

Попробовав это с моим веб-приложением, я, наконец, смог заставить карту структуры работать в моем приложении (Ура).

Он также показал мне, как исправить зависимость от моего класса продукта, который передается из Linq в Sql.Он создает дополнительный объект, который затем вызывается с помощью "select new product { }" в запросах Linq.

Вау, этот ответ немного длиннее, чем я планировал, но я надеюсь, что это поможет другим людям, таким как я, которые очень новички в кодировании и Asp.net Mvc.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top