我有EF5的問題。我正在使用MVC 4.5實體框架5與存儲庫檢索舊數據
我試圖使每個請求「模式」1上下文。
我沒有使用「工作單元」模式,也沒有使用測試或DI。
我正在使用通用存儲庫模式與數據庫進行交互。每個存儲庫使用單身「DataContextManager」所使用的相同上下文。
在全局asax中的每個請求中,我刷新了上下文,但是發生了一些錯誤:ie:如果我在DB中更改了數據,我有一個分頁列表並移動頁面,因此它無法正確刷新。 這不是一個HTML緩存問題,我測試了它。
我知道是EF上下文的問題,因爲我有「這樣的事情」:
private static Context C; //for the singleton. And in global.asax
public Application_BeginRequest()
{
DataContextManager.RefreshNew();
}
protected void Application_EndRequest(object sender, EventArgs e)
{
Domain.DataContextManager.Dispose();
}
並在第一時間名單的工作,並在第二頁我得到一個錯誤說, 上下文是處置。
我讀了一些在靜態變量中使用上下文的東西,但我不知道發生了什麼。我想使用這樣簡單的東西,因爲要實現UnitOfWork模式,我需要更改很多代碼。
這裏是我的課的一點snnipet:
public class DataContextManager
{
private static Entities _Context;
private const string ConnectionString = "connString";
public static Entities Context
{
get
{
if (DataContextManager._Context == null)
DataContextManager._Context = new Entities(ConfigurationManager.ConnectionStrings[ConnectionString].ConnectionString);
return DataContextManager._Context;
}
}
//This method is not necessary but made it for testing
public static void RefreshNew()
{
DataContextManager._Context = new Entities(ConfigurationManager.ConnectionStrings[ConnectionString].ConnectionString);
}
public static void Dispose()
{
if (DataContextManager._Context != null)
{
DataContextManager._Context.Dispose();
DataContextManager._Context = null;
}
}
}
和存儲庫使用DataContextManager這樣的:提前
public class BaseRepository<TEntity> where TEntity : class
{
internal Entities context;
internal DbSet<TEntity> dbSet;
public BaseRepository()
: this(DataContextManager.Context)
{
}
public BaseRepository(Entities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
謝謝!
Pablo。