Использование nHibernate для получения схемы базы данных - PullRequest
3 голосов
/ 13 августа 2010

Можно ли сгенерировать схему базы данных из nHibernate, где я предоставил nHibernate с конфигурацией для базы данных, но я не написал никаких сопоставлений.

Я хочу получить метаданные / схему базы данных программно.

Я использую базу данных Oracle.Я пробовал два подхода:

Подход один:

    public DatabaseMetadata GetMetadata(DbConnection connectionIn)
    {
        return new DatabaseMetadata(connectionIn, _dialect);
    }

Проблема: Это, кажется, то, что яОднако, несмотря на то, что он правильно соединяется, он не поднял ни одну из моих таблиц.Все, что я предоставил, это объект конфигурации nHibernate, который был заполнен содержимым моего файла nHibernate.xml.config (строка подключения, клиентский драйвер и т. Д.).

Вопрос: Почему бы не вернуть данные таблицы?Подключен правильно, но ничего не находит!

Второй подход:

 public void DatabaseSchema()
 {
     var schema = new SchemaExport(nHibernateConfiguration);
     schema.SetOutputFile("schema.dll");
      schema.Create(true, true);
 }

nHibernateConfiguration - это экземпляр (свойство класса) объекта конфигурации nHibernate, заполненный содержимым из класса nHibernate.xml.config.,

Проблема: Это просто не работает.Сбои со следующим исключением:

NHibernate.MappingException: Dialect не поддерживает генерацию идентификационного ключа

Я подозреваю, что это будет генерировать схему только на основе созданных вами сопоставлений?Я не создал никаких отображений.Идея в том, что это будет работать против любой базы данных, к которой я подключился, для создания схемы для нее.

Вопрос: Верю ли я, что этот метод будет генерировать схему только на основе моих отображений?Если нет, правильно ли я это использую?

Надеюсь, это достаточно ясно, прокомментируйте, если мне нужно предоставить больше информации.

Заранее спасибо.

Для ясности: у меня есть база данных, и я хочу получить метаданные, представляющие базу данных, схему.

Ответы [ 3 ]

3 голосов
/ 23 августа 2010

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

  1. Инструмент схемы NHibernate
  2. Генератор карт NHibernate

Если у вас уже есть схема, вы можете использовать NHibernate Mapping Generator для создания ваших отображений. Затем вы можете использовать сопоставления для всего, что вы хотите. Измените их и используйте NHibernate Schema Tool для управления реальной схемой.

Если у вас нет какой-либо схемы, и это то, что вы пытаетесь создать, вы на правильном пути. Сначала вам нужно «сопоставить» свои занятия. Предпочтительно использовать Fluent NHibernate или ConfORM, как предложил Майкл Мэддокс.

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

3 голосов
/ 24 августа 2010

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

Ответы на ваши конкретные вопросы:

Подход один: NHibernate делаетне читать определения таблиц из базы данных.Все определения таблиц должны быть указаны в файлах сопоставления.

Второй подход: SchemaExport создает файл SQL (создание таблиц, индексов и т. Д.) Из определений сопоставления.На самом деле рекомендуется использовать его, если вам не нужно справляться с устаревшими базами данных.Выходной файл должен называться * .sql, а не * .dll.

Скорее всего, вы получите ошибку, потому что вы пытаетесь создать идентификатор в базе данных оракула (или другой, который не поддерживает столбцы идентификаторов),Вместо этого используйте hilo (или, если вам не нравится, guid.comb или native).Мне просто интересно, почему вы получаете эту ошибку, я думал, что вы не писали никаких файлов сопоставления?

Вывод:

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

1 голос
/ 14 августа 2010

Возможно, я неправильно истолковываю вопрос, не совсем понятно, о чем вы просите.

Если вы правильно создали классы и настроили NHibernate и хотите создать таблицы в базе данных для этих классов, выесть как минимум два возможных способа создания базы данных без создания сопоставлений NHibernate, оба из которых, вероятно, будут работать намного лучше, по крайней мере, с некоторыми подсказками о том, как выполнять сопоставления:

Свободный автоматический преобразователь NHibernate

ConfORM

Существует неплохая кривая обучения для обоих вариантов.

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

Core NHibernate не предназначен и не предназначен для создания таблиц без файлов сопоставлений.

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