En utilisant NHibernate pour exécuter des instructions DDL
-
19-09-2019 - |
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.
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())
// ...
}
}