質問: 私はEFCoreを使用してバックエンドDBにデータをスティッキングしています。データセットに追加された特定の数の新しいオブジェクトごとに`SaveChanges`を呼び出し、EFCoreデバッグログから、接続を終了し、呼び出したたびに新しいものを開くことに気づきました`SaveChanges` : ``` Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Opening connection to database ... Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Beginning transaction with isolation level 'Unspecified'. Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Committing transaction Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Closing connection to database... .... the logs repeats forever ``` とにかく、 `DbContext`ライフサイクル全体に1つの接続を使用するだけですか?
回答: この仕組みを変更したり、まったく心配する必要はありません。既定では、SQL Serverの接続は接続プールに戻されますので、実際には閉じられません。新しいものを開くと、プール内の次のものを取得できます。 接続文字列に値を設定して本当に必要な場合はプールを制御できますが、実際に自分が何をしているのか分からない限り、これを忠告するのではなく、( MSDNの.aspx) )主要なプロパティです。 > **接続ライフタイム** :接続がプールに戻されると、その作成時間が現在の時間と比較され、その時間間隔(秒単位)がConnection Lifetimeで指定された値を超えた場合、接続は破棄されます。これは、クラスタ化された構成で、実行中のサーバーとオンラインになったばかりのサーバー間の負荷分散を強制する場合に便利です。ゼロ(0)の値はプールされた接続が最大タイムアウトを持つようにします。 > > **接続リセット** :プールから削除するときにデータベース接続をリセットするかどうかを指定します。 Microsoft SQL Serverバージョン7.0の場合、falseに設定すると、接続を取得するときに追加のラウンドトリップを回避できますが、データベースコンテキストなどの接続状態がリセットされていないことに注意する必要があります。 > > **Enlist** :trueの場合、トランザクションコンテキストが存在する場合、プーラーは自動的に作成スレッドの現在のトランザクションコンテキストで接続を登録します。 > > **Max Pool Size** : **プール**内で許可される最大接続数。 > > **最小プールサイズ** : **プール**内で維持される最小接続数。 > > **プーリング** :真の場合、接続は適切なプールから引き出されるか、または必要に応じて作成され、適切なプールに追加されます。 > >