2017-02-28 9 views
2

WebAPIとEntity Frameworkを使用して自分のプラットフォームで操作を実行する最善の方法を見つけようとしています。ASP.NET WebAPI 2 + Entity Framework接続キャッシュのベストプラクティス

今私はすべての要求で新しい接続を作成しています。すべてのコントローラには、オブジェクトがインスタンス化されていて、すべてのメソッドのように配置されています。

public class SchedulerController : ApiController 
{ 
    private ApplicationDbContext db = new ApplicationDbContext(); 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
      db.Dispose(); 
     base.Dispose(disposing); 
    } 
} 

私の意見では、リクエストごとの接続の作成は、パフォーマンスに影響する完全なオーバーヘッドです。私はJava上で、同じ接続を再利用するための一種の接続プールを処理するいくつかのツール(Nutcrackerはおそらく?)があることを知っています。

c#/ ASP.NET/Azureプラットフォームのようなものはありますか?

私は本当に要求の増加の数でパフォーマンスの比較もありがとうと思います。

EDIT:主に、DbContextが作成したキャッシングを参照します。

+2

新しいDbContextを作成しても、データベース接続は開きません – ErikEJ

答えて

5

あなたは、Entity Frameworkの仕組みを誤解していると思います。

EFはADO.NETを使用しているため、接続プーリングは実際にプロバイダによって管理されます。接続文字列を使用してプーリングの動作を変更できます。私はそれがデフォルトで接続を再利用すると信じています。

EFはまた、Unit of Workのような内部的にいくつかのパターンを使用しているため、一連の操作(したがって、名前に "context"という単語)をカプセル化することを意図しています。これは、データベースにすべてを "コミット"するSaveChanges()メソッドを持つ理由です。

このため、「作業単位」の完全性を保証するために、要求ごとに新しいインスタンスを作成することをお勧めします。さらに、変換した変更を必ず変換する方法で保存する必要があります物事のDB側の原子取引に

しかし、あなたができることは、コントローラが要求ごとにコントローラを作成するのではなく、必要なときだけインスタンスを作成することです。次に、Web APIチャンスを使用している場合は、ほとんどの場合、データにアクセスする必要があります。

関連する問題