session.Close()和session.Dispose()之间的区别

And*_*ndy 14 nhibernate

session.Close()和之间有什么区别session.Dispose()

Sly*_*Sly 22

来自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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以Dispose方法调用Close().调用其中之一Close()Dispose()方法将关闭会话,不再允许您使用它.


Jus*_*ner 9

调用session.Close()将关闭会话但不会丢弃该对象.

调用session.Dispose()(通常通过使用使用块)将关闭会话,如果它是打开的,并执行额外的操作Dispose().