Pergunta

Como posso executar uma instrução DDL via NHibernate?

Para ser claro, eu não quer gerar automaticamente meu esquema de meus arquivos de mapeamento. Meu DDL são armazenados em arquivos de texto simples ao longo das linhas de:

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

Eu quero percorrer estes em ordem e executar cada um deles. Eu poderia apenas abrir um SqlConnection e executar através de um SqlCommand mas eu gostaria de passar por NHibernate se houver uma boa maneira de fazer isso. Isto é principalmente porque eu quero permanecer como agnóstico banco de dados possível: Eu tenho uma db SQL agora, mas eu poderia precisar para implementar o Oracle ou DB2 depois ...

Eu estou usando .Net v3.51 e NHibernate v2.1. Eu olhei para a classe NHibernate SchemaExport mas não podia ver uma maneira de usar isso para esta finalidade.

Foi útil?

Solução

Você pode obter uma IDbConnection de propriedade Connection de um ISession mas você vai precisar fazer isso com SqlCommand. Execução de DDL está fora do escopo do NHibernate.

Outras dicas

Eu usei session.Connection.CreateCommand e session.Transaction.EnlistCommand antes com sucesso para executar o SQL cru.

Aqui está um trecho de algo semelhante que eu fiz:

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())
        // ...
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top