Frage

Wie kann ich eine DDL-Anweisung über NHibernate ausführen?

Um klar zu sein, I nicht will automatisch generiert mein Schema aus meinen Mapping-Dateien. Meine DDL ist in Textdateien gespeichert entlang der Linien von:

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

Ich möchte, um durch diese um und jeder von ihnen auszuführen. Ich konnte nur ein SqlConnection öffnen und über einen SqlCommand ausführen, aber ich mag durch NHibernate gehen, wenn es eine schöne Art und Weise, dies zu tun. Dies ist vor allem, weil ich als Datenbank Agnostiker wie möglich bleiben wollen: Ich habe eine SQL jetzt db aber ich könnte Oracle oder DB2 implementieren müssen später ...

Ich bin mit .Net v3.51 und NHibernate v2.1. Ich sah die NHibernate Schemaklasse an, kann aber nicht einen Weg zu verwenden, um dies zu diesem Zweck sehen.

War es hilfreich?

Lösung

Sie können eine IDbConnection von einem ISession der Connection-Eigenschaft erhalten, aber Sie werden dies mit SqlCommand tun müssen. DDL Ausführen außerhalb von NHibernate Anwendungsbereich.

Andere Tipps

Ich habe session.Connection.CreateCommand und session.Transaction.EnlistCommand vor mit Erfolg verwendet rohe SQL ausgeführt werden.

Hier ist ein Ausschnitt aus etwas ähnlichem, dass ich getan habe:

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())
        // ...
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top