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

StackOverflow https://stackoverflow.com/questions/2023120

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вы можете получить 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())
        // ...
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top