我如何通过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工具类,但不能找到一种方式来使用这个目的。

有帮助吗?

解决方案

您可以从一个ISession的连接财产的IDbConnection但你需要的SqlCommand做到这一点。执行DDL是NHibernate的范围之外。

其他提示

我用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())
        // ...
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top