これが事実であると確信していますか?NHProf が伝えていることによって分離レベルのみを確認している場合。それは問題になる可能性があります。NHProf は、NHibernate のロギング インフラストラクチャがフィードするものだけを報告していることに注意してください。デフォルトでトランザクションを開いたときに、分離レベル メッセージが送信されないのではないでしょうか? これはおそらく、NHibernate のソースを調査することで確認できます。
これが期待どおりに機能していないと結論付ける前に、代替手段を使用してトランザクションレベルを確認することをお勧めします (おそらく SQL プロファイラー?)。
編集:
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 ではもはや問題ではないと推測しています。