Domanda

Come posso eseguire un'istruzione DDL tramite NHibernate?

Per essere chiari, I Non voler generare automaticamente il mio schema dal mio file di mapping. Il mio DDL è memorizzato in file di testo seguendo le linee di:

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

Voglio scorrere questi in ordine ed eseguire ciascuno di essi. Ho potuto solo aprire una SqlConnection ed eseguire tramite uno SqlCommand ma mi piacerebbe passare attraverso NHibernate se v'è un bel modo per fare questo. Questo è principalmente perché voglio rimanere come base di dati agnostico possibile: ho un DB SQL ora ma potrebbe aver bisogno di implementare Oracle o DB2 dopo ...

Sto usando Net v3.51 e NHibernate v2.1. Ho guardato la classe NHibernate SchemaExport ma non riuscivo a vedere un modo per utilizzare questo per questo scopo.

È stato utile?

Soluzione

È possibile ottenere un IDbConnection dalla proprietà Connection di un ISession ma avrete bisogno di fare questo con SqlCommand. L'esecuzione DDL è al di fuori del campo di applicazione di NHibernate.

Altri suggerimenti

Ho usato session.Connection.CreateCommand e session.Transaction.EnlistCommand prima con successo per eseguire SQL prime.

Ecco un frammento di qualcosa di simile che ho fatto:

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())
        // ...
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top