Разница между 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().