NHibernate для динамического создания / изменения / удаления таблиц - PullRequest
2 голосов
/ 29 ноября 2009

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

Я хотел бы знать, существует ли скрытый API, который я мог бы использовать для динамического создания / изменения / удаления таблиц. Я мог бы сделать это с ADO.Net, но я хотел бы абстрагировать код для создания таблиц для различных баз данных (MS SQL, MySQL и т. Д.)

Точность 1. Проблема с CreateSQLQuery заключается в том, что мне пришлось бы переписать метод создания таблицы для разных серверов SQL (MS SQL, MySQl и т. Д.). У него нет преимуществ перед ADO.Net. Когда NHibernate генерирует базу данных из сопоставлений, она генерирует для любых серверов SQL ... это то, что я ищу. Какой код выполняется, когда NHibernate генерирует базу данных из сопоставлений ... этот код доступен / public?

Ответы [ 3 ]

1 голос
/ 30 ноября 2009

Да, вы можете:)

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

Важные классы для поиска в исходном коде NH находятся в пространстве имен Nhibernate.Mapping: PersistentClass, RootClass.

Вот пример: https://nhibernate.info/blog/2008/11/16/mapping-source-how-map-a-class-without-use-nothing.html

Я использовал этот «API» для динамической генерации таблиц.

0 голосов
/ 30 ноября 2009

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

Public Sub CreateDatabaseSchemaFromMappingFiles()
    Dim cfg As New NHibernate.Cfg.Configuration()

    cfg.Configure()

    Dim schema As New NHibernate.Tool.hbm2ddl.SchemaExport(cfg)

    schema.Create(True, False)
End Sub
0 голосов
/ 30 ноября 2009

Не существует специального API для динамического создания / изменения / удаления таблиц. В зависимости от того, что вам нужно сделать и когда вы хотите, чтобы эти действия происходили, у вас есть следующие опции:

  • Используйте тег в файлах сопоставления xml для выполнения любых действий с базой данных сразу после генерации схемы
  • Используйте именованные запросы и в файлах сопоставления для создания операторов SQL для запуска из вашего кода. (Я никогда не пробовал их с помощью команд создания / изменения / удаления таблиц, но стоит попробовать).
  • Используйте метод Session.CreateSQLQuery () для выполнения собственной команды SQL. (Опять же, как и в предыдущем варианте, я никогда не пробовал использовать команды создания / изменения / удаления таблиц, но считаю, что стоит попробовать).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...