【问题标题】:NHibernate to dynamically create/alter/delete tablesNHibernate 动态创建/更改/删除表
【发布时间】:2009-11-29 20:49:11
【问题描述】:

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

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

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

【问题讨论】:

  • 人们为什么要做这些事情?这与 NHibernate 的用途相反。

标签: c# sql nhibernate


【解决方案1】:

是的,你可以:)

您可以动态创建与要映射的类相对应的类型。然后生成一个映射。

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

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

我已经使用这个“API”来动态生成表格。

【讨论】:

    【解决方案2】:

    没有用于动态创建/更改/删除表的特定 API。根据您需要做什么以及希望这些操作何时发生,您有以下选择:

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

    【讨论】:

    • 请阅读我在问题中添加的评论 1,了解有关我正在寻找的内容的更多详细信息。
    【解决方案3】:

    您可以使用架构对象。
    您需要配置 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
    

    【讨论】:

      猜你喜欢
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多