Использование NHibernate для выполнения операторов DDL

Как я могу выполнить оператор DDL через NHibernate?

Чтобы было ясно, я не хочу автоматически генерировать мою схему из моих файлов сопоставления. Мой 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, но не смог найти способ использовать это для этой цели.

2 ответа

Решение

Вы можете получить IDbConnection из свойства подключения ISession, но вам нужно сделать это с помощью SqlCommand. Выполнение DDL выходит за рамки NHibernate.

Я использовал session.Connection.CreateCommand а также session.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())
        // ...
    }
}
Другие вопросы по тегам