2013-03-01 26 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