Использование NHibernate для выполнения инструкций DDL
-
19-09-2019 - |
Вопрос
Как я могу выполнить инструкцию 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, но не смог найти способа использовать его для этой цели.
Решение
Вы можете получить 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())
// ...
}
}