【发布时间】:2013-09-06 19:02:55
【问题描述】:
这可能是一个显而易见的问题... 下面是我用于与数据库交互的静态类的骨架。我的问题是:如果一个静态类在应用程序的持续时间内存在,那么这是否意味着字段 _context 将有一个连接保持打开那么长时间?,或者如果我用 using 包装我所做的调用声明,我可以确信连接只会按预期打开和关闭吗?
public static class MyStaticClass
{
private static dbEntities _context;
static MyStaticClass()
{
_context = new dbEntities();
}
private static void UpdateContext()
{
_context = new dbEntities();
}
public static bool DoSomething(int id)
{
using (var context = _context)
{
var result = (from x in context.table.where(p=>p.id == id) select x).FirstOrDefault();
}
}
}
【问题讨论】:
-
如果你在
using中包装它的使用,那么你将在第一次调用后简单地使用一个处置的对象,它不会工作。 -
即使我在 using 语句之后调用显示的 updatecontext 方法来更新上下文?
-
考虑使用
static dbEntities GetContext()代替字段和Update方法。使适当的范围界定方式更简单。 -
你可以自己试试看。如果您能够重新初始化已经释放的对象,那么为什么要首先释放它呢?您又回到了始终持有其资源的状态。最好每次都创建一个新的上下文。如果您打算每次都创建一个新的上下文,那么保留已经处理的旧上下文有什么用。对你没用。
标签: c# entity-framework dbcontext static-classes