如何在实体框架中实现IDisposable



我有我的实体框架上下文在一个单独的EL层,它代表实体层,然后我移动到DAL,然后BL和我的用户界面aspx.cs代码页。我很困惑如何在同样的情况下使用一次性的。我到目前为止所做的,假设在我的DAL中我有我的实体的上下文。

namespace abc
{
    public class Action: IDisposable
    {
        Entities context = new Entities();
        // all the methods
        public void Dispose()
        {
            context.Dispose();
        }
    }
}

这样做正确吗?我只是一个天真的程序员,所以请帮助我学习相同的逻辑。

我个人会稍微改变一下,比如:虽然我在实体框架内实现IDisposable的经验很少。

namespace abc
{
    public class Action: IDisposable
    {
        private bool _disposed;
        Entities context= new Entities();
        // all the methods
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    context.Dispose();
                    // Dispose other managed resources.
                }
                //release unmanaged resources.
            }
            _disposed = true;
        }
    }
}

一般来说,是的,您的Dispose方法应该处理实现IDisposable的所有资源以及非托管资源(文件等)

然而,保留EF上下文作为资源通常不是一个好的设计。如果您在Action方法中创建Context并在完成后处理它,您可能会获得更好的成功。然后,如果这是你唯一的资源,你根本不需要实现IDisposable

最新更新