私は複数のコンテキストで問題を抱えています。主な解決策は、リポジトリ間でコンテキストを共有することですが、これを行う方法の良い例は見つかりませんでした。Entity Framework 4.1コードファースト - リポジトリ間でdbContextを共有する適切な方法は?
参考までに、MVC Web Appを使用してデータレイヤーに接続しています。私はユーザーの要求ごとに1つのコンテキストを持っていたいと思います(これが正しいと仮定して)。
おかげで、
編集 -
これはBrokenGlassのリンクと、次のSO Questionの助けを借りて、私のソリューションです:
私は基本的に作業パターンと依存性注入の単位を実装しました。 MVCの使用に加えて、Ninjectも使用しています。指定したリポジトリのコンストラクタで
(作業単位パターンの詳細については、以下のリンクを参照):
public class PersonRepository : IPersonRepository
{
private readonly MyContext _context;
public PersonRepository(IUnitOfWork unitOfWork)
{
if (unitOfWork == null)
throw new ArgumentNullException("unitOfWork");
_context = unitOfWork as MyContext;
}
//...
}
私のMVCアプリでNinjectMVC3クラスの(キーがInRequestScope()メソッドである):
をprivate static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUnitOfWork>().To<MyContext>().InRequestScope();
kernel.Bind<IPersonRepository>().To<PersonRepository>();
//...
}
Unit of Workリンクのおかげで、私は自分のリポジトリにDIのタイプを実装していなかったので、本質的にそれは私がする必要がありました。私もNinjectを使用しているので、答えが少し複雑になりましたが、解決が簡単になりました。私は私の最終的な解決策で私の質問を更新します。 – matto0