2

この記事の助けを借りて、自分のソフトウェアにリポジトリパターンを実装しました。一つの質問が私の頭を悩ませます。"var ourDatabase = new Database();"ユーザーはステートメントを使用して複数のデータベースコンテキストを作成するべきではないため、データベースクラスはシングルトンパターンを実装する必要があると思います。私は正しいですか、それともこの状況は実装の使用法に関する批判的な問題ではありません。

4

1 に答える 1

7

EntityFrameworkでデータベースコンテキストをシングルトンとして使用しないでください。手始めに、各コンテキストインスタンスはそれに加えられたすべての変更を追跡し、「変更の保存」はすべての変更を保存します。したがって、Webアプリケーションがあり、コンテキストをシングルトンにした場合、すべてのユーザーが同じコンテキストを更新し、「変更の保存」と呼ばれる場合は、すべてのユーザーの変更が保存されます。シングルユーザーのWindowsアプリケーションでは、アプリケーションのさまざまな部分が並行して動作している場合を除いて、これはそれほど問題にはなりません。

また、コンテキストはすでにロードされているデータをキャッシュし、デフォルトで変更を追跡することに注意してください。要するに、これは、追跡されるオブジェクトが増えるにつれて、メモリの肥大化とパフォーマンスの低下を意味する可能性がありますが、実際には、この影響はさまざまです。

パフォーマンスの観点から、Entity Frameworkはカバーの下に接続プールを実装しているため、データベースコンテキストオブジェクトの作成と破棄について心配する必要はありません。非常に安価です。

于 2013-01-19T22:09:39.553 に答える