1

私は MVC + Entity Framework 5 を使用しており、現在Unit of Work patternを見ています。コントローラー クラスには、次のコードが表示されます。

private UnitOfWork unitOfWork = new UnitOfWork();

これは、コントローラごとにクラスが作成され、インスタンスUnitOfWorkごとにデータベース接続が発生するということですか? UnitOfWorkそれとも、すべてのDbContextインスタンス (この記事SchoolContextでは で作成されたインスタンスUnitOfWork) が同じ接続を共有していますか?

私の 2 番目の質問: にUnitOfWork格納されるインスタンスが 1 つだけ作成された場合、アプリケーションのパフォーマンスが向上しますHttpContextか、それともより良い方法がありますか?

4

1 に答える 1

2

まず、注意させてください。あなたがこれを行っていないことは知っていますが、決して単一のデータ コンテキストを作成してそれを静的またはシングルトンにするべきではないことを理解していることを確認したいと思います。その理由は、アプリのすべてのインスタンス (つまり、複数のユーザー) 間で静的が共有され、データ コンテキストがマルチスレッドまたはマルチユーザーに対して安全ではないためです。

その警告を与えたので、先に進みましょう。

通常、これについて心配する必要はありません。その理由は、複数の UnitOfWorks を作成しても、(Web 要求ごとに) 一度にアクティブになるコントローラーは 1 つだけだからです。Entity Framework には、接続を再利用し、その使用を最適化する接続プーラーがあります。(実際には、これは Ado.net の一部ですが、それでも適用されます)

于 2012-10-09T16:07:13.640 に答える