2013-03-01 27 views
2

我有我的实体框架上下文在一个单独的EL层,代表实体层,然后我移动到DAL,然后BL和我的用户界面aspx.cs代码页。 我很困惑,因为如何在同一个IDisposable中使用。 我在做什么直到现在,supopose在我的DAL我有我的实体的背景。如何在实体框架中实现IDisposable?

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

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

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

+0

DAL中是否存在“Action”类? – 2013-03-01 14:41:22

+0

不,这只是一个类的名字,我在我创建的方法中使用了实体类。 – 2013-03-01 14:45:56

回答

3

就个人而言,我会稍微改变一下,例如: 虽然我在实体框架中实现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; 
     } 
    } 
} 
+0

好吧,让我执行相同的,我会恢复,因为我实际上在做代码分析,并在那里我得到了这个警告,所以让我检查如果我已经做到了正确。 – 2013-03-01 14:48:03

+0

不,它是要求我重写方法 – 2013-03-01 14:57:22

+0

哪种方法要求重写?从哪个类别? – AssaultingCuccos 2013-03-01 15:02:53

2

那么在一般情况下,是的,你Dispose方法应该处理实现IDisposable以及非托管资源(文件等)的所有资源的

然而,它通常不是一个好的设计扶住一个EF上下文作为资源。如果您在Action方法中创建了Context,并且在完成该方法后将其处置,则您可能会获得更好的成功。那么,如果这是您唯一的资源,那么您不需要执行IDisposable,所有

+0

我无法得到如何使用它,又一次令人困惑:( – 2013-03-01 14:46:46

+1

您的_usage_是正确的;我只是指出EF上下文通常是在方法调用中创建和处理的,而不是作为一个类。 – 2013-03-01 14:49:34