Использование NHibernate для выполнения операторов DDL
Как я могу выполнить оператор DDL через NHibernate?
Чтобы было ясно, я не хочу автоматически генерировать мою схему из моих файлов сопоставления. Мой DDL хранится в виде простых текстовых файлов по строкам:
CREATE TABLE Foo (Bar VARCHAR(10))
GO
CREATE TABLE Hello (World INTEGER)
GO
Я хочу просмотреть все по порядку и выполнить каждый из них. Я мог бы просто открыть SqlConnection и выполнить через SqlCommand, но я бы хотел пройти через NHibernate, если есть хороший способ сделать это. Это происходит главным образом потому, что я хочу оставаться настолько независимым от базы данных, насколько это возможно: у меня есть база данных SQL сейчас, но мне может понадобиться реализовать Oracle или DB2 позже...
Я использую.Net v3.51 и NHibernate v2.1. Я посмотрел на класс NHibernate SchemaExport, но не смог найти способ использовать это для этой цели.
2 ответа
Вы можете получить IDbConnection из свойства подключения ISession, но вам нужно сделать это с помощью SqlCommand. Выполнение DDL выходит за рамки NHibernate.
Я использовал session.Connection.CreateCommand
а также session.Transaction.EnlistCommand
прежде чем с успехом запустить сырой SQL.
Вот фрагмент чего-то похожего, что я сделал:
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())
// ...
}
}