如何在Entity Framework中实现IDisposable?

时间:2013-03-01 14:34:14

标签: c# entity-framework implementation idisposable

我将实体框架上下文放在一个单独的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();
        }
    }
}

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

2 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分:2)

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

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