1

データ アクセス レイヤーで .NET 用の FluentData ORM を使用しています。ただし、この質問はほとんどの ORM に当てはまる可能性があります。

IDbContext の適切な寿命は? データベースへの新しいクエリが実行されるたびに、新しいデータベース コンテキストをインスタンス化する必要がありますか? 以下に 2 つのシナリオがありますが、どちらが適切に使用されますか? MS SQL と MySQL サーバーにクエリを実行していることに注意してください。したがって、最大接続に到達する限り、どちらにも影響があるかどうかを知りたいです。はい、複数のスレッドでデータベースを呼び出しています。どちらのシナリオもスレッドセーフですか?

シナリオ A:

私のリポジトリ クラスは IDisposable を実装し、IDbContext 型のプライベート変数を保持します。この変数は、コンストラクターでインスタンス化され、クラスが破棄されるときに破棄されます。リポジトリ内のコンテキストのインスタンスは 1 つだけです。

シナリオ B:

私のリポジトリ クラスには、IDbContext の新しいインスタンスを返すプライベート メソッドがあります。別のメソッドがデータベースを呼び出すたびに、このメソッドを呼び出して新しいデータベース コンテキストを取得します。

4

1 に答える 1

1

公式ドキュメントから:


いつ処分するの?

  • UseTransaction または UseSharedConnection を有効にした場合は、DbContext を破棄する必要があります。
  • UseMultiResult (または MultiResultSql) を有効にしている場合は、DbCommand を破棄する必要があります。
  • UseMultiResult を有効にした場合は、StoredProcedureBuilder を破棄する必要があります。

他のすべてのケースでは、dispose は FluentData によって自動的に処理されます。これは、クエリが実行される直前にデータベース接続が開かれ、実行が完了した直後に閉じられることを意味します。


http://fluentdata.codeplex.com/documentation#Dispose

それが誰かを助けることを願っています。

于 2013-04-25T00:27:37.640 に答える