2009-11-29 102 views
2

我知道NHibernate是一个ORM,它通常不用于创建表,但我也知道NHibernate能够创建一个给定映射的整个数据库。NHibernate动态创建/更改/删除表

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

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

+2

为什么人们做这些事情?这与NHibernate的目标相反。 – yfeldblum 2009-11-30 00:22:38

回答

0

没有特定的API来动态创建/更改/删除表。根据你需要做什么,当你想这些动作发生,你有以下几种选择:

  • 使用的XML映射文件的标签生成您的模式只是后在数据库中执行任何你想要的动作
  • 使用命名查询并在映射文件中创建SQL语句以从代码运行。 (我从来没有尝试过使用create/alter/delete table命令尝试这些方法,但它的价值尝试)。
  • 使用Session.CreateSQLQuery()方法执行本机SQL命令。 (再次作为前面的选项,我从来没有尝试过使用create/alter/delete table命令,但我认为它值得尝试)。
+0

请阅读评论1,我已将其添加到我的问题中以获取有关我所需要的更多详细信息。 – W3Max 2009-11-30 00:10:09

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