2009-08-02 1 views
5

Я пытаюсь узнать Asp.net Mvc, поэтому я пытаюсь сделать this Учебное пособие.Asp.net Mvc: Создание классов моделей с LINQ to SQL

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

Использование LINQ to SQL в классе контроллера затрудняет переход технологий доступа к данным в будущем. Например, вы можете перейти от использования Microsoft LINQ to 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. Я не уверен, как я это сделаю. Думаю, я должен был использовать какой-то объект, который не зависел от файла dbml?

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

+1

Хороший вопрос. –

ответ

1

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

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

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

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

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

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

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

+0

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

6

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

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

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

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

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

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

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

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

  • Ссылка:Scott Hanselman: List of .NET DI Containers(IOC): очень хороший блог с большинством решений .NET МОК.
  • Ссылка:Phil Haack: TTD and DI using Structure Map: Использование конфигурационного файла xml для меня было сложным, и я не мог заставить его работать.
  • Ссылка: Andre Loker: ASPNET-MVC-with-Windsor-programmatic-controller-registration: Не пробовал этот пример. Теперь, глядя на него, я мог бы заставить его работать.
  • Ссылка:MvcContrib: Это добавляет функциональность Asp.net Mvc. У него также есть 3 или 4 IOC ControllerFactories. Я не мог заставить его работать, я также не нашел много документации об этом.

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

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

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

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

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

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

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

  • Нет связанных вопросов^_^