Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate动态创建/更改/删除表_C#_Sql_Nhibernate - Fatal编程技术网

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

C# NHibernate动态创建/更改/删除表,c#,sql,nhibernate,C#,Sql,Nhibernate,我知道NHibernate是一种ORM,它通常不用于创建表,但我也知道NHibernate能够在给定一些映射的情况下创建整个数据库 我想知道是否有一个模糊的API可以用来动态创建/更改/删除表。我可以用ADO.Net来实现这一点,但我想抽象出为不同数据库(MS SQL、MySQL等)创建表的代码 精度1:CreateSQLQuery的问题是,我必须重写为不同的SQL服务器(MS SQL、MySQl等)创建表的方法。它没有ADO.Net的优势。当NHibernate根据它为任何SQL Server

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

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


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

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

  • 在生成模式之后,使用xml映射文件中的标记在数据库上执行您想要的任何操作
  • 在映射文件中使用命名查询和创建要从代码运行的SQL语句。(我从未用create/alter/delete table命令尝试过这些命令,但值得一试)
  • 使用Session.CreateSQLQuery()方法执行本机SQL命令。(与前面的选项一样,我从未尝试过使用create/alter/delete table命令,但我认为值得一试)
是的,你可以:)

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

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

以下是一个示例:


我使用这个“API”动态生成表。

您可以使用schema对象。
您需要配置NHibernate并使用模式对象调用create。这两个布尔值要么删除数据库并重新创建它,要么只是将其输出到控制台。 VB.Net


请阅读我在问题中添加的评论1,了解更多关于我所寻找的内容的详细信息。人们为什么要做这些事情?这与NHibernate的目的相反。
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