レイヤード アーキテクチャの Entity Framework での私の質問に対する回答に基づいて、リポジトリ (ビジネス ロジックではなく CRUD 抽象化のみを担当) を DAL に移動し、ビジネス ロジック用に BLL を予約します。
エンティティ コンテキストは作業単位と見なす必要があるため、再利用すべきではないという結論に達しました。したがって、リポジトリで HttpContext ごとに obejctcontext を作成して、パフォーマンス/スレッドの [un]safe 問題を回避したいと考えています。次のように、リポジトリで objectcontext を定義したいと思います。
public MyDBEntities ctx
{
get
{
string ocKey = "ctx_" + HttpContext.Current.GetHashCode().ToString("x");
if (!HttpContext.Current.Items.Contains(ocKey))
HttpContext.Current.Items.Add(ocKey, new MyDBEntities ());
return HttpContext.Current.Items[ocKey] as MyDBEntities ;
}
}
その場合、DAL プロジェクトは HttpContext.Current 変数を認識する必要があります。これが良い習慣かどうかはわかりませんが、あなたの意見を知りたいです。