Asp.net Mvc: создание классов моделей с LINQ to SQL - PullRequest
5 голосов
/ 02 августа 2009

Я пытаюсь выучить Asp.net Mvc, поэтому я пытаюсь this Tutorial.

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

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

Примечание: я никогда не понимал, как работает интерфейс, до прочтения этого урока, и он до сих пор не ясен на 100%. Теперь я вижу его как своего рода «шаблон» для класса.

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 03 августа 2009

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 02 августа 2009

Возможно, ваш репозиторий отсоединен из-за внедрения, а не из-за

.

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

Я рекомендую вам прочитать о МОК, это просто и очень интересно, вы можете использовать и контейнер ioc, как замок Виндзор.

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

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

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

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

...