NHibernate动态创建/更改/删除表

时间:2009-11-29 20:49:12

标签: c# sql nhibernate

我知道NHibernate是一个ORM,它通常不用于创建表,但我也知道NHibernate能够在给定映射的情况下创建整个数据库。

我想知道是否存在可用于动态创建/更改/删除表的模糊 API。我可以用ADO.Net做到这一点,但我想抽象为不同数据库创建表的代码(MS SQL,MySQL等)

精度1:CreateSQLQuery的问题在于我必须重写为不同SQL服务器创建表的方法(MS SQL,MySQl等)。它没有ADO.Net的优势。当NHibernate从映射生成数据库时,它会为任何SQL服务器生成...这就是我正在寻找的。当NHibernate从映射生成数据库时执行的代码是什么...这个代码可用/公共吗?

3 个答案:

答案 0 :(得分:1)

是的,你可以:)

您动态创建与要映射的类对应的Type。然后生成映射。

要查看NH源代码的重要类在Nhibernate.Mapping命名空间中:PersistentClass,RootClass。

以下是一个示例: https://nhibernate.info/blog/2008/11/16/mapping-source-how-map-a-class-without-use-nothing.html

我已使用此“API”动态生成表格。

答案 1 :(得分:0)

没有用于动态创建/更改/删除表的特定API。根据您需要执行的操作以及何时需要执行这些操作,您可以选择以下选项:

  • 使用xml映射文件中的标记在生成模式后立即对数据库执行任何操作
  • 使用命名查询并在映射文件中创建要从代码运行的SQL语句。 (我从未尝试使用create / alter / delete table命令,但值得尝试)。
  • 使用Session.CreateSQLQuery()方法执行本机SQL命令。 (再次作为前一个选项,我从未尝试过使用create / alter / delete table命令,但我相信它值得尝试)。

答案 2 :(得分:0)

您可以使用架构对象 您需要配置NHibernate并使用模式对象调用create。两个布尔值将删除数据库并重新创建它或只是将其输出到控制台。 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