3

私はこれについて少し混乱し矛盾するアドバイスを読んできました。

次のメソッドの例を考えます。

using(var db = new MainContext())
{
    var q = db.tblArcadeGames;
    foreach (var game in q)
    {
        UpdateGameStats(game);
    }
}

public void UpdateGameStats(ArcadeGame game)
{
    using(var db = new MainContext())
    {
        // Do some queries and updates etc
    }
}

最初に作成されたデータ コンテキストはUpdateGameStats、次のようにパラメーターとして渡されます。

using(var db = new MainContext())
{
    var q = db.tblArcadeGames;
    foreach (var game in q)
    {
        UpdateGameStats(game, db);
    }
}

public void UpdateGameStats(ArcadeGame game, MainContext db)
{
        // Do some queries and updates etc
}

データ コンテキストの再利用は常にベスト プラクティスですか? 再利用されるページごとに 1 つだけ作成する必要がありますか? それとも、毎回新しいものを作成する必要がありますか?

データ コンテキストを再利用すると、場合によってはコードの保守とモジュール化が困難になる状況が生じるように思えます。

4

2 に答える 2

3

この特定の例では、データ コンテキストを再利用します。

  1. 新しいコンテキストを確立するオーバーヘッドを回避
  2. エンティティを添付したままにします。これは、ページでエンティティを再利用する予定がある場合に適しています

いつコンテキストを破棄するかについて、厳格で迅速なルールはありません。それは、データの使用方法によって異なります。

  • まれに:操作が小規模で、頻度が低く、アトミックである場合、コンテキストを維持すると、オンデマンドで作成するよりも多くのオーバーヘッド/メンテナンスが発生する可能性があります。に入れるだけusingです。
  • 通常:定期的に更新して保存している場合は、ページごとにコンテキストを作成しますが、それを渡すのではなくページに破棄させます。パフォーマンスと保守性の最適なトレードオフを提供します。
于 2013-06-14T13:40:55.620 に答える
1

エンティティを再利用している限り、データ コンテキスト インスタンスを再利用する必要があります。エンティティは特定のコンテキストに関連付けられているため、クエリと更新の間で同じコンテキストを使用し続ける必要があります。

Web アプリケーションに対する私の個人的な好みは、リクエストの期間中に単一のデータ コンテキストを使用し、それを EndRequest イベントで破棄することです。

于 2013-06-14T13:37:51.403 に答える