В последнее время я изучал доступные ORM на основе .NET. Я заметил, что каждый попадает в один или два лагеря. В одном лагере сначала создается база данных, а ORM обеспечивает более простой способ доступа к базе данных в приложении. Во втором лагере объектная модель существует первой, и ORM способствует сохранению объектной модели в базе данных.
Я не спрашиваю и не утверждаю, что один лагерь лучше другого. Я определенно вижу причины для каждой методологии проектирования. Что меня расстраивает, так это то, что из всех руководств и документов по «началу работы», которые я читал в последнее время, ни один не выходит просто и не говорит в самом начале «этот инструмент предполагает, что вы начинаете с существующей базы данных / объектной модели». Для меня это очень важно для того, будете ли вы использовать один ORM против другого.
Итак, после кучи чтения и создания пары проектов «Hello World» я собрал ряд пунктов по рабочим процессам, поддерживаемым ORM, которые я изучил. Может ли кто-нибудь, имеющий опыт работы с этими инструментами, сказать мне, сделал ли я какие-либо неправильные утверждения или полностью пропустил какие-либо действительно важные моменты. В частности, мне бы очень хотелось знать, верны ли мои предположения о том, должна ли схема базы данных или объектная модель быть первой в каждом инструменте.
- База данных должна существовать первой
- Работает только с SQL Server
- Класс DataContext используется для чтения / записи между классами и базой данных.
- DataContext может перенастроить реальные физические классы, или можно использовать динамические типы для автоматического создания типов на основе схемы базы данных.
- Сопоставление значений по умолчанию для сопоставления имен таблиц с именами классов и имен свойств с именами столбцов
- Сопоставление можно настроить с помощью атрибутов, встроенных в каждый класс.
- База данных должна быть создана в первую очередь
- Работает с рядом технологий баз данных
- Классы генерируются автоматически из существующей схемы базы данных с использованием шаблонов T4.
- Connection to database is totally transparent once classes are generated
- Calling class constructors automagicaly create records in database
- Изменение значений свойств автоматически обновляет базу данных.
Subsonic (простой репозиторий)
- Структура класса должна быть на первом месте
- Работает с рядом технологий баз данных
- Класс репозитория создан и подключен к базе данных
- Database schema is created and updated automaticaly when classes are added to the repository
repo.Add<MyClass>(instance);
- Репозиторий использует отражение для создания / обновления схемы базы данных
- Создайте таблицу для каждого раза и столбец для каждого свойства
- Either database or class structure can be created first
- Mapping may be created to match a new class structure to an existing database
- Сопоставление можно использовать для автоматического создания схема базы данных
- Работает с рядом технологий баз данных
- Классы внутри окончательной сборки приписываются настройкам сопоставления NHibernate, которые сопоставляют классы и свойства таблицам и столбцам.
- There are two methods to add mapping configuration
- XML files embeded in the binary,
<classname>.hbm.xml
- Атрибуты добавлены в код
- XML files embeded in the binary,
- Поддерживает расширенную конфигурацию сопоставления, включая один к одному, один к одному, многие к одному, многие ко многим, наследование и т. Д. И т. Д.