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

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

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

Using LINQ to SQL within a controller class makes it difficult to switch data access technologies in the future. For example, you might decide to switch from using Microsoft LINQ to SQL to using the Microsoft Entity Framework as your data access technology. In that case, you would need to rewrite every controller that accesses the database within your application.

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

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

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

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

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

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


person Pickels    schedule 02.08.2009    source источник


Ответы (2)


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

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

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

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

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

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

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

person Alfredo Fernández    schedule 02.08.2009
comment
Привет спасибо за ответ. Я читаю о МОК (что, к удивлению, не имеет в виду Международный олимпийский комитет!), И мне кажется, что это правильный путь. Насколько я понимаю, IoC заключается в том, что вы можете указать ему использовать определенный класс для определенного интерфейса, и поскольку настройки хранятся в отдельном файле, легко вносить глобальные настройки. Единственное, что меня беспокоит, это то, что мне нужен дополнительный фреймворк для IoC, а также то, что их несколько. В любом случае еще раз спасибо за ответ. - person Pickels; 02.08.2009

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

Одним из первых сайтов, которые я нашел, был сайт со скринкастом о 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 в своих репозиториях. Поэтому я был рад видеть, что он использовал карту структуры, но вместо использования XML-файла конфигурации он использовал класс загрузчика, который регистрирует все интерфейсы для их конкретного класса.

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

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

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

person Pickels    schedule 03.08.2009