Сравнение ORM: что идет первым, база данных или классы?

В последнее время я изучал доступные ORM на основе .NET. Я заметил, что каждый оказывается в одном или двух лагерях. В одном лагере сначала создается база данных, а ORM обеспечивает более простой способ доступа к базе данных в приложении. Во втором лагере объектная модель существует первой, и ORM способствует сохранению объектной модели в базе данных.

Сейчас я не спрашиваю и не утверждаю, лучше ли один лагерь, чем другой. Я определенно вижу причины для каждой методологии проектирования. Что меня расстраивает, так это то, что из всех руководств и документов по «началу работы», которые я читал в последнее время, ни один из них не выходит просто и говорит в самом начале: «Этот инструмент предполагает, что вы начинаете с существующей базы данных / объектной модели». Для меня это очень важно для того, будете ли вы использовать один ORM против другого.

Итак, после кучи чтения и создания пары проектов «Hello World» я собрал серию пунктов по рабочим процессам, поддерживаемым ORM, которые я изучил. Может ли кто-нибудь, имеющий опыт работы с этими инструментами, сказать мне, сделал ли я какие-либо неправильные утверждения или полностью пропустил какие-либо действительно важные моменты. В частности, мне бы очень хотелось знать, верны ли мои предположения о том, должна ли схема базы данных или объектная модель быть первой в каждом инструменте.

Linq To SQL

  • База данных должна существовать первой
  • Работает только с SQL Server
  • Класс DataContext используется для чтения / записи между классами и базой данных.
  • DataContext может восстанавливать реальные физические классы или динамические типы могут использоваться для автоматического создания типов на основе схемы базы данных.
  • Отображение значений по умолчанию для сопоставления имен таблиц с имена классов,
    • Вызов конструкторов классов автоматически создает записи в базе данных
    • При изменении значений свойств автоматически обновляется база данных.

Дозвуковой (простой репозиторий)

  • Структура классов должна быть первой
  • Работает с рядом технологий баз данных
  • Класс репозитория создается и подключается к базе данных
  • Схема базы данных создается и обновляется автоматически, когда классы добавляются в репозиторий.
    • repo.Add (instance);
    • Репозиторий использует отражение для создания / обновления схемы базы данных
    • Создание таблицы для каждого раза и столбца для каждого свойства

NHibernate

  • Любая база данных или сначала можно создать структуру класса
    • Отображение может быть создано для сопоставления новой структуры классов с существующей базой данных.
    • Отображение может использоваться для автоматического создания схемы базы данных
  • Работает с рядом технологий баз данных
  • Классы внутри окончательной сборки приписываются настройкам отображения NHibernate, которые отображают классы и свойства в таблицы и столбцы
  • Есть два метода для добавления конфигурации отображения
    • XML-файлы, встроенные в двоичный файл, .hbm.xml
    • Атрибуты, добавленные в код
  • Поддерживает расширенную конфигурацию сопоставления, включая один к одному, один к одному, многие к одному, многие к многие, наследование и т. д. л и т. д.

9
задан Diego Mijelshon 15 September 2010 в 20:24
поделиться