Самый простой способ использовать NHibernate для официального руководства "ASP.Net MVC 3 Getting Started" - PullRequest
5 голосов
/ 04 августа 2011

Уточненный обновленный вопрос - Начало


В официальном руководстве по началу работы с MVC 3 мне кажется, что все, что нам нужно сделать, чтобы заставить работать ORM, этодва шага.

Сначала добавление простого кода MovieDBContext, как описано в конце части 4 ..

public class MovieDBContext : DbContext 
{
    public DbSet<Movie> Movies { get; set; } 
}

.. и second в начале части 5 , просто щелкнув правой кнопкой мыши на папке Controllers, мы можем автоматически сгенерировать MoviesController, который реализует CRUD () - функциональность, используя Entity Frameworkпросто сообщая, какую модель использовать.
Теперь при использовании веб-приложения мы уже можем писать и читать из базы данных.

Что будет самым простым (илипростой) способ сделать это для нашей Movie-модели с NHibernate вместо использования Entity Framework?


Уточненный обновленный вопрос - Конец





Оригинальный вопрос (только для дополнительной информации):


Я пытаюсь создать приложение ASP.Net MVC 3, которое использует NHibernate и Postgres.

Справочная информация

Разработка выполняется в Windows с помощью Visual Web DeveloperExpress, производственной средой будет / должен быть Linux + Mono.

Шаги, которые до сих пор работали:

  • Веб-приложение динамических объектов данных ASP.Net, использующее Npgsql и Postgres asБД.Успешно запустится на машине разработки Windows. (после этого учебного пособия)
  • Приложение ASP.Net MVC 3 без использования базы данных / модели: успешно запущено на компьютере разработчика Windows и развернуто в рабочей среде Linux с использованием Mono и Nginx.(Только как подтверждение концепции для меня, а не как общедоступного веб-приложения.)
  • Приложение ASP.Net MVC 3 с моделью, использующей SQL Server Express в качестве БД.Успешно запустился на моей машине для разработки Windows. (Следуя учебному пособию по началу работы с MVC 3)

Вопрос

Пока мне удалось заставить Postgres работать с "веб-приложением Dynamic Data Entities"но с веб-приложением MVC 3 я застрял на том, где / как начать.Для последнего упомянутого MVC-3-Movie-Webapp я хочу переключить БД с SQL Server Express на Postgres, используя NHibernate и Npgsql (NHibernate, поскольку Mono не поддерживает Entity Framework ).

Когда вы смотрите на конец части 4 , есть простой код MovieDBContext

public class MovieDBContext : DbContext 
{
    public DbSet<Movie> Movies { get; set; } 
}

и в начале части 5 мы автоматически генерируем CRUD-материалиспользуя Entity Framework, просто указав, какую модель использовать.(MoviesController.cs, Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml и Index.cshtml)

Итак, я работаю с Entity Framework и SQL Server Express, но какбы я достиг того же результата с помощью NHibernate?(не обязательно сразу с postgres, поэтому лучше было бы придерживаться SQL-Server в качестве первого шага) (Надеюсь, с такой же простотой, но получить сам результат было бы здорово)
Я нашел многостарые вещи и как я бы вручную отображал вещи, но что было бы современным стандартным способом достижения этого с NHibernate для MVC 3?

(Самым близким, что я нашел, был исходный код, упомянутый в эта нить , но она разархивирована на 64 МБ. Я получил несколько ошибок «Проекты не загружены успешно», и автор сказал, что использует MVC 2, так что я думаю, что это немного над головой, потому что я являюсь полным новичком NHibernate.)

Я думаю, что демонстрация того, как это делается, может быть очень полезна и для других, так как исходное руководство очень легко понять и связано как официальная отправная точка для разработки приложений MVC 3 в http://www.asp.net/mvc («Ваше первое приложение ASP.NET MVC»).Поэтому я думаю, что это будет отличный пример того, как использовать NHibernate с MVC 3.

Ответы [ 3 ]

1 голос
/ 06 августа 2011

На самом деле, эти автоматизированные вещи недостаточно полезны в реальных приложениях. Мы должны разделить проблемы, и использование DataContext в UI Layer не является хорошей практикой, потому что эта зависимость вызовет проблемы, такие как отсутствие способности к тестированию, нарушение рекомендаций. Я думаю, что вы должны иметь следующие вещи вашего проекта

  1. Разделение проблем (многоуровневая архитектура - уровень пользовательского интерфейса, уровень обслуживания, уровень домена, уровень инфраструктуры)
  2. Обобщение репозитория и единицы работы (функциональность базы данных, ORM - EF, NHibernate и т. Д.
  3. В ваших сервисных слоях обрабатывают репозитории и единицы рабочих обработок и выставляют объекты Data Transfer или ваши доменные объекты (POCO) на UI Layer
  4. Использование IOC для внедрения зависимостей поможет вам минимизировать зависимости
  5. Создание модульных тестов и интеграционных тестов
  6. Предпочитают использовать Непрерывную интеграцию и контроль источника (Распределенный: Mercurial)

Полезные ссылки:

  1. (Sharp Architecture) http://sharparchitecture.codeplex.com/
  2. (Контейнер МОК) http://www.castleproject.org/container/
  3. (Общий репозиторий) http://code.google.com/p/genericrepository/
1 голос
/ 12 августа 2011

NuGet - твой друг.Вот хороший пример использования NuGet для автоматической автоматической привязки ваших зависимостей и конфигурации.

Надеюсь, это поможет.

0 голосов
/ 04 августа 2011

Предложение, не зацикливайтесь на всех автоматических материалах, которые вам показывают учебники. Microsoft просто пытается показать, что вы можете легко начать работу, если не попытаетесь сделать что-то уникальное.

Теперь для вашей ситуации. Когда вы создаете контроллер, вы хотите связать этот контроллер с типом модели, которую вы где-то создали. С nHibernate я думаю, что вы вручную создали эти POCO и что вы используете один из многих способов отобразить эти POCO через nHibernate в вашу базу данных.

Вы не сможете использовать параметры Entity Framework, потому что они зависят от функций инфраструктуры для предоставления информации об объекте, базе данных и т. Д. Самое простое - просто создать контроллер, который либо дает вам опций для CRUD или используйте пустой контроллер для создания собственных ActionResults.

Надеюсь, это поможет и удачи в вашем проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...