nhibernate - 使用NHibernate执行DDL语句

标签 nhibernate database-create

如何通过 NHibernate 执行 DDL 语句?

需要明确的是,我不想从映射文件自动生成架构。我的 DDL 存储在纯文本文件中,格式如下:

CREATE TABLE Foo (Bar VARCHAR(10))
GO
CREATE TABLE Hello (World INTEGER)
GO

我想按顺序循环这些并执行它们中的每一个。我可以打开一个 SqlConnection 并通过 SqlCommand 执行,但如果有一个好的方法来执行此操作,我想通过 NHibernate。这主要是因为我希望尽可能保持与数据库无关:我现在有一个 SQL 数据库,但以后可能需要实现 Oracle 或 DB2...

我正在使用 .Net v3.51 和 NHibernate v2.1。我查看了 NHibernate SchemaExport 类,但找不到将其用于此目的的方法。

最佳答案

我之前曾使用 session.Connection.CreateCommandsession.Transaction.EnlistCommand 成功运行原始 SQL。

这是我做过的类似事情的片段:

using (var command = _session.Connection.CreateCommand())
{
    _session.Transaction.Enlist(command);
    command.CommandText = "select foo from bar where id = @id";
    var versionIdParameter = command.CreateParameter();
    versionIdParameter.ParameterName = "id";
    versionIdParameter.Value = id;
    command.Parameters.Add(versionIdParameter);
    using(var reader = command.ExecuteReader(CommandBehavior.SequentialAccess))
    {
        while (reader.Read())
        // ...
    }
}

关于nhibernate - 使用NHibernate执行DDL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2023120/

相关文章:

mysql - Cpanel MySQL 远程创建/删除数据库

NHibernate 忽略长度属性

NHibernate QueryOver Multiple Order By with Aliases

.net - 如何使用SQL Server 2005在NHibernate中映射uint

nhibernate - 为什么我的 NHibernate 包集合没有动态设置 child 的 'parent id'?

database - 如何在 NHibernate 中进行此投影?

mysql - 为什么 mysql "ENGINE=InnoDB"不适用于 joomla 3 安装