如果我有一个带有dbcontext字段的静态类,这是否意味着连接在应用程序的生命周期内保持打开状态?

Meg*_*ark 3 c# entity-framework static-classes dbcontext

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

Ser*_*rvy 8

如果你有一个静态上下文,那么它意味着该对象持有的所有资源将在应用程序的持续时间内保留,是的.

如果你在一个使用中包装它的使用然后你只是在第一次调用后使用一个被处置的对象,它将无法工作.

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

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