简体   繁体   中英

Using NHibernate to execute DDL statements

How can I execute a DDL statement via NHibernate?

To be clear, I don't want to auto-generate my schema from my mapping files. My DDL is stored in plain text files along the lines of:

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

I want to cycle through these in order and execute each of them. I could just open a SqlConnection and execute via a SqlCommand but I'd like to go through NHibernate if there is a nice way to do this. This is mainly because I want to remain as database agnostic as possible: I have a SQL db now but I might need to implement Oracle or DB2 later...

I'm using .Net v3.51 and NHibernate v2.1. I looked at the NHibernate SchemaExport class but couldn't see a way to use this for this purpose.

I've used session.Connection.CreateCommand and session.Transaction.EnlistCommand before with success to run raw SQL.

Here's a snippet of something similar that I've done:

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())
        // ...
    }
}

You can get an IDbConnection from an ISession's Connection property but you'll need to do this with SqlCommand. Executing DDL is outside of NHibernate's scope.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM