2015-06-20 36 views
0

我有很多存儲庫類使用DbContext變量。初始化這個DbContext變量的最佳做法是什麼?爲基本類C中的存儲庫初始化dbcontext#

我試圖與繼承IDisposable爲此在基類,但我的應用程序中進行操作的很多在一次和我得到DataReader的是忙中出錯。但是當我使用這個函數:using(var _entities = MyDbContext.Create())都好嗎?什麼是問題,解決問題的最好方法是什麼?

現在我的基類是這樣的:

public abstract class BaseRepository : IDisposable 
    { 
     protected readonly MyDbContext_entities; 
     public BaseRepository() 
     { 
      _entities = MyDbContext.Create(); 
     } 
     #region Implement IDisposable 
     private bool disposed = false; 

     protected virtual void Dispose(bool disposing) 
     { 
      if (!this.disposed) 
      { 
       if (disposing) 
       { 
        _entities.Dispose(); 
       } 
      } 
      this.disposed = true; 
     } 

     public void Dispose() 
     { 
      Dispose(true); 
      GC.SuppressFinalize(this); 
     } 
     #endregion 
    } 

,並用我的回購之一獲得與構造此值:

public MyRepo():base(){}; 

功能MyDbContext.Create()

public static MyDbContext Create() 
{ 
     return new MyDbContext(); 
} 

回答

0

我想_entities變量類型和變量名稱之間缺少空格。

如果你的MyDbContext.Create()返回的不是MyDbContext類型,我認爲你應該使一些泛型集合返回值。 ,所以你可以放棄你的實體沒有'var'爲每個方法的_entities類型,你可以使用你的泛型類型。

如果您還沒有嘗試c# 的通用功能,您可以嘗試尋找泛型類和泛型方法的主題。

+0

我知道泛型類型,但有很多方法,我希望有一種方法來解決這個問題,也許基類 – NoNameR

1

最好的做法是注入的實例的DbContext到構造,甚至更好的注入Func<DBContext>,然後你可以控制分貝範圍內的每方法基礎上的生命週期。而且你不再需要一個基類來達到這個目的。

這當然需要使用DI容器,這在asp.net mvc中是微不足道的。

+0

可以舉個例子嗎? – NoNameR

+0

你可以找到谷歌的例子。 – MikeSW