2012-02-08 5 views
1

私は解決できるアーキテクチャ上の問題に直面していると思います。asp.netアプリケーションでDbContextをどこに格納しますか?

私はエンティティフレームワークコード(v4.3 beta1)を使用してWebアプリケーションを開発しています。 また、いくつかのWebサービスが公開されています。

別のクラスライブラリでは、私はDbContextとal、エンティティを持っています。このライブラリは、Webアプリケーションによって参照されます。 「データ」ライブラリで

、私はデ・コンテキストを保持するための静的プロパティがあります。

namespace MMOrpheus.Lib 
{ 
    public class Context 
    { 
     public static MMOrpheusDB MMO 
     { 
      get 
      { 
       if (HttpContext.Current != null && HttpContext.Current.Session["MMOEntities"] == null) 
       { 
        HttpContext.Current.Session["MMOEntities"] = new MMOrpheusDB(); 
       } 
       return HttpContext.Current.Session["MMOEntities"] as MMOrpheusDB; 
      } 
      set 
      { 
       if (HttpContext.Current != null) 
        HttpContext.Current.Session["MMOEntities"] = value; 
      } 
     } 
    } 
} 

MMOrpheusDBはDbContextから継承します。

だから問題は私が間違いなくこれが正しくないと感じていることです。とりわけ、私はこのContextクラスがSystem.Webを使うべきだとは思わない!

このプロジェクトの構成方法に関するご意見はありますか?

答えて

2

あなたの質問に対する答えは単純なものではありません。私が提案するすべての

まず、あなたがコントロールフレームワーク(のStructureMap、ユニティ、...)の依存性注入&反転を使用しています。

は、あなたはそれがとても簡単になりますIOCを使用して、あなたのDbContextを保存しようとしている場合。 生涯のコンテキストと定義することができます。私は通常、PerRequestのライフタイムを使います。 Webリクエストごとに1つのDbContextインスタンス。 DBContextは要求で始まり、それで終了します。

しかし、このパターンは必要ありません。開始文脈必要なときにを使った後にそれを処分することができます。あなたが最初のアプローチを好む場合

ドメイン駆動設計の検索、IOC、作業単位、リポジトリパターン&など

+0

おかげアフシンGhを、あなたはおよそ読んで多くのことを与えました –