我对 EF5 有疑问。我正在使用 MVC 4.5
我正在尝试为每个请求“模式”制作 1 个上下文。
我没有使用“工作单元”模式,也没有测试或 DI。
我正在使用通用存储库模式与数据库交互。每个存储库都使用由单例“DataContextManager”维护的相同上下文。
在全局 asax 中的每个请求中,我都会刷新上下文,但发生了一些错误:即:如果我手动更改数据库中的数据,我有一个分页列表并按页面移动,它不会正确刷新。这不是 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 模式,我需要更改很多代码。
这是我的课程的一个小片段:
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>();
}
提前致谢!
巴勃罗。