1

DataContext を有効なままにして再利用するのは良い方法ではないことはわかっているので、Using ステートメントでラップしました。

また、私の知る限り、DataContext は初期化時に接続を開き、破棄時に接続を閉じます。

ここで達成しようとしているのは、現在ログインしているユーザーごとに個別の接続を開いたままにすることです (ユーザーがログアウトするときに手動で接続を閉じます)。

ロックを使用しているため、マルチスレッドは問題ではありません。

SQLConnections を保持し、それらを DataContext コンストラクターに渡します。この種の作品。しかし問題は、DataContext が破棄されると自動的に接続を閉じることです。

DataContext が使用する接続を強制的に閉じないようにすることは何とか可能ですか?

4

1 に答える 1

2

一般に、レコードを介してある種のループを実行しようとし、そのたびにDataContext(さらには SQL 接続も) 作成すると、問題点が発生します。これを行わない限り、大きなパフォーマンス上の問題は発生しないはずです。

私の意見では、DataContext に渡すことができるように SQL 接続を開いたままにするという考えは、時期尚早の最適化です。SQL 接続はそれほど高価ではなく、オブジェクトでもありませDataContext

一般に、DataContextオブジェクトの有効期間は、関連する Repository オブジェクトの有効期間と同じにする必要があります。

public class CustomerRepository
{
    private MyDatabaseDataContext dataContext;

    public CustomerRepository()
    {
        dataContext = new MyDatabaseDataContext();
    }

    public Customer GetCustomer(int id)
    {
        return dataContext.Customers.FirstOrDefault(x => x.id == id);
    }

    public IQueryable<Customer> CustomersByRep(int repID)
    {
        return dataContext.Customers.Where(x => x.repID == repID);
    }
}

ASP.NET MVC のヒント #34 – DataContext を破棄する (または破棄しない) も参照してください

于 2012-06-04T22:10:04.537 に答える