Question

Comment puis-je exécuter une instruction via NHibernate DDL?

Pour être clair, je ne pas veulent générer automatiquement mon schéma de mes fichiers de mappage. Mon DDL est stocké dans des fichiers de texte brut le long des lignes de:

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

Je veux faire défiler ces derniers dans l'ordre et exercerai chacun d'eux. Je pouvais ouvrir un SqlConnection et exécuter par un SqlCommand mais je voudrais passer par NHibernate s'il y a une bonne façon de le faire. Ceci est principalement parce que je veux rester comme base de données agnostique possible: J'ai maintenant SQL db, mais je pourrais avoir besoin de mettre en œuvre plus tard Oracle ou DB2 ...

J'utilise .Net v3.51 et NHibernate v2.1. Je regardais la classe NHibernate SchemaExport mais ne pouvait pas voir un moyen d'utiliser pour cette fin.

Était-ce utile?

La solution

Vous pouvez obtenir une IDbConnection d'une propriété de connexion de ISession mais vous aurez besoin de le faire avec SqlCommand. L'exécution est en dehors DDL du champ d'application NHibernate.

Autres conseils

Je l'ai utilisé session.Connection.CreateCommand et session.Transaction.EnlistCommand avant avec succès pour exécuter SQL brut.

Voici un extrait de quelque chose de similaire que je l'ai fait:

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())
        // ...
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top