1

asp.net mvc アプリケーションでは、EF5 を使用し、http 要求ごとに 1 つの DbContext インスタンスを作成します。データベース接続は EF 自体によって処理されるため、私のコードではデータベース接続の開閉について心配する必要はありません。

私の質問:

  1. 1 つの http 要求で DbSet を使用して複数のデータベースの読み取り/書き込み操作を行う場合。すべての操作でデータベース接続のオープン/クローズが必要ですか? 1 つの http リクエストで、非常に多くのオープン/クローズが発生する可能性があり、コストが高くなります。

  2. 上記の質問に「はい」の場合、open/close データベース接続を自分で手動で管理して、begin_request で開き、end_request で閉じることができますか?

ありがとう

4

2 に答える 2

0

DbContext の次のコンストラクターを使用して、Entity Framework 6 で接続を手動で管理できます。

DbContext(DbConnection, Boolean)

例があります(疑似コード):

// ...
var myConnection = new SqlConnection(myConnectionString);
var myDbContext = new MyDbContext(myConnection, false);
// ...
// TODO: you must close and dispose "myConnection" manually

MyDbContext の場所:

class MyDbContext : DbContext 
{
   // ....

   // constructor
   MyDbContext(DbConnection conn, boolean contextOwnsConnection)
     : base (conn, contextOwnsConnection) 
   {
      // ...
   }

   // ....

}

contextOwnsConnection として「true」を使用すると、DbContext が破棄されるときに接続が閉じられます。

ブール値パラメーターのヘルプについては、https://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext (v=vs.113).aspx のドキュメントを参照してください。

このアプローチを使用すると、同じ接続で複数の DbContext を使用できることに注意してください。

接続しているデータベースに応じて接続を使用できることにも注意してください。次の例では、ODP for Entity Framework をインストールして Oracle を使用しています。

var myConnection = new OracleConnection(myConnectionString);
于 2015-07-01T13:14:04.520 に答える