2

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

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

        public void Dispose()
        {
            context.Dispose();
        }
    }
}

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

4

2 回答 2

4

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;
        }
    }
}
于 2013-03-01T14:45:58.200 回答
2

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

但是,将 EF 上下文作为资源保留通常不是一个好的设计。如果您在方法中创建一个并在完成后将其处理掉,您可能会获得更好的Context成功ActionIDisposable 然后,如果这是您唯一的资源,则根本不需要实施.

于 2013-03-01T14:41:31.857 回答