NHibernate Native SQL и DialectScope - PullRequest
       0

NHibernate Native SQL и DialectScope

1 голос
/ 15 апреля 2010

У меня есть два нативных SQL-запроса. Один для Oracle и один для MSSql. Я хочу запустить их через NHibernate. Как мне узнать, на каком Db-движке я работаю? Я знаю, что могу добавить диалектную область в файлах сопоставления для <database-object />. Есть ли что-то подобное для <sql-query />? Или я должен вставить цикл if в мой код и попытаться выяснить диалект?

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 апреля 2010

Это никогда не сработало: мне нужно проанализировать результат по-разному в зависимости от версии базы данных. Если иное на диалекте - это путь сюда.

Еще одним вариантом была бы хранимая процедура. Тогда я мог бы использовать database-object и создать по одному для каждой базы данных. Но я не люблю хранимые процедуры:)

1 голос
/ 15 апреля 2010

Вы можете привести ваш NHibernate.ISessionFactory к NHibernate.Impl.SessionFactoryImpl и запросить его свойство Dialect, которое является объектом класса, производного от NHibernate.Dialect.Dialect (например, MsSql2000Dialect или Oracle8iDialect).

Последующие версии базы данных (2000, 2005, 2008) реализованы с помощью классов, полученных из предыдущей версии (используйте Object Browser для анализа NHibernate.dll)

0 голосов
/ 15 апреля 2010

Если SQL одинаков для обоих запросов, вы можете использовать интерфейсы ADO.NET из сеанса ISession. Например:

IDbConnection cxn = session.Connection;
using (IDbCommand cmd = cxn.CreateCommand)
{
    cmd.CommandText = "select * from schema.table";
    IDataReader rdr = cmd.ExecuteReader;
}

Вы можете добавить параметры, используя cmd.CreateParameter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...