3

这可能是一个显而易见的问题……下面是我用于与数据库交互的静态类的骨架。我的问题是:如果一个静态类在应用程序的持续时间内存在,那么这是否意味着字段 _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();
        }
    }
}
4

2 回答 2

8

如果您有一个静态上下文,那么这意味着该对象持有的所有资源都将在应用程序的持续时间内被持有,是的。

如果您在 using 中包装使用它,那么您将在第一次调用后简单地使用已处置的对象,并且它将不起作用。

相反,您应该在较小的范围内简单地创建新的数据上下文。不需要它是一个长寿的对象。连接池有助于确保创建多个短期上下文的成本不会比一个长期上下文昂贵得多。

让每个上下文代表一个逻辑操作,然后为下一个操作创建一个新的。

于 2013-09-06T19:06:31.327 回答
2

您需要确保 dbcontext 类是线程安全的,否则如果您的应用程序有多个同时用户,一个用户可以关闭另一个用户的连接或接收他没有要求的数据,您将遇到非常严重的问题。

于 2013-09-06T19:08:52.777 回答