3

これはおそらく明らかな質問です... 以下は、データベースとの対話に使用している静的クラスのスケルトンです。私の質問はこれです: 静的クラスがアプリケーションの期間中存続する場合、それはフィールド _context がその期間も開いたままの接続を持つことを意味しますか?ステートメント、接続が期待どおりにのみ開いたり閉じたりすることを確信できますか?

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 でラップすると、最初の呼び出しの後に単に破棄されたオブジェクトを使用することになり、機能しません。

代わりに、より小さなスコープで新しいデータ コンテキストを作成する必要があります。寿命の長いオブジェクトである必要はありません。接続プーリングは、存続期間の短いコンテキストを複数作成するコストが、存続期間の長いコンテキストを 1 つ作成する場合よりもはるかに高くならないようにするのに役立ちます。

各コンテキストが 1 つの論理操作を表すようにし、次の操作のために新しいコンテキストを作成します。

于 2013-09-06T19:06:31.327 に答える
2

dbcontext クラスがスレッドセーフであることを確認する必要があります。そうしないと、アプリケーションに複数の同時ユーザーがいる場合、1 人のユーザーが他のユーザーの接続を閉じたり、要求していないデータを受信したりする場合に、非常に深刻な問題が発生する可能性があります。

于 2013-09-06T19:08:52.777 に答える