Использование NHibernate для выполнения операторов DDL - PullRequest
3 голосов
/ 07 января 2010

Как я могу выполнить оператор 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 ]

3 голосов
/ 07 января 2010

Ранее я успешно использовал 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())
        // ...
    }
}
1 голос
/ 07 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...