В чем разница между session.Close()
и session.Dispose()
?
Разница между session.Close() и session.Dispose()
Ответ 1
Из исходного кода Nhibernate:
private void Dispose(bool isDisposing)
{
using (new SessionIdLoggingContext(base.SessionId))
{
if (!base.IsAlreadyDisposed)
{
log.Debug(string.Format("[session-id={0}] executing real Dispose({1})", base.SessionId, isDisposing));
if (!(!isDisposing || base.IsClosed))
{
this.Close();
}
base.IsAlreadyDisposed = true;
GC.SuppressFinalize(this);
}
}
}
Так Dispose вызовы методов Close()
. Вызов методов Close()
или Dispose()
закроет сеанс, не позволяя вам работать с ним больше.
Ответ 2
Вызов session.Close()
закроет сеанс, но не удалит объект.
Вызов session.Dispose()
(обычно с использованием используемого блока) закроет сеанс, если он открыт, а также выполняет дополнительные операции Dispose()
.