0

次のように設計された ASP.Net MVC 3 フォト ギャラリーがあります。

Data Repositories(IImageRepoSitory, ITagRepository etc)
      |
   Services (IGalleryService, IWebService etc)
      |
  Web Application

Ninject を使用して、必要なサービスとリポジトリを Web アプリケーションに挿入します。

実際のデータベースを使用する前に、単純な ArrayList (および JSON シリアル化) を既存のロジック (JsonImageRepository/JsonTagRepository になります) として使用しましたが、これは完全に正常に機能します。しかしその後、EF4 CTP5 (Code First) に移行したところ、多くの問題が発生しました。基本的に、これらのリポジトリとサービスを Singleton (Global.asax.cs で宣言) として挿入しましたが、リポジトリにアクセスするスレッドが複数ある場合は、次のように表示されます。

データ接続が閉じられています。

Ninjectのスレッドモードやリクエストモードなどに変更しましたが、さまざまな例外が発生しました(コンテキストの複数のインスタンスに関しては、シングルトンが唯一のオプションであるべきだと思います)。

設計に問題はありませんか?または、これらのコンポーネントをどのように構成すればよいですか?

4

1 に答える 1

4

通常、リポジトリ アクセスはリクエスト スコープ内にある必要があります (少なくともデータを変更するもの)。Ninject と NHibernate を使用したリポジトリ パターンの実装に関する bob のブログ投稿を参照することをお勧めします。EF4 の場合もほぼ同じはずです。

http://blog.bobcravens.com/2010/06/the-repository-pattern-with-linq-to-fluent-nhibernate-and-mysql/

http://blog.bobcravens.com/2010/07/using-nhibernate-in-asp-net-mvc/

http://blog.bobcravens.com/2010/09/the-repository-pattern-part-2/

近い将来、これをサンプル アプリケーションに追加する予定です。

于 2011-02-07T12:38:36.463 に答える