Вы уверены, что это так?Если вы проверяете уровень изоляции только по тому, что говорит вам NHProf;это может быть проблемой.Помните, что NHProf сообщает только о том, что обеспечивает инфраструктура ведения журналов в NHibernate.Возможно, сообщение об уровне изоляции не отправляется при открытии транзакции по умолчанию?Вероятно, это можно проверить, изучив источник NHibernate.
Я бы предложил использовать альтернативные средства для проверки уровня транзакции (возможно, SQL Profiler?), Прежде чем сделать вывод, что это не работает должным образом.
Редактировать:
Я посмотрел на источник NHibernate и могу подтвердить мою догадку выше.Если вы посмотрите на источник AdoTransaction , вы заметите, что он регистрирует уровень изоляции IsolationLevel.Unspecified, когда транзакция запускается без указания определенного уровня изоляции.
// This is the default overload you're calling:
public void Begin()
{
Begin(IsolationLevel.Unspecified);
}
// This is the full method impl
public void Begin(IsolationLevel isolationLevel)
{
// snip....
// This is the problematic line here; it will report an isolationLevel of Unspecified.
log.Debug(string.Format("Begin ({0})", isolationLevel));
// snip...
}
Однако фактическая транзакция запускается с уровнем изоляции, указанным в конфиге на несколько строк ниже:
if (isolationLevel == IsolationLevel.Unspecified)
{
isolationLevel = session.Factory.Settings.IsolationLevel;
}
Итак, похоже, что NHProf нев этом случае он полностью точен.
Обновление:
Похоже, это было исправлено в транковой версии NHibernate, поэтому я предполагаю, что это больше непроблема с NHibernate 3.xx.