単に2つの異なるコンテキストを使用します。コンテキストをリセットしてから新しいコンテキストを作成するためのより良い解決策はありません。現在のアーキテクチャと戦っている場合は、新しいシナリオをサポートするようにアーキテクチャを改善するだけです。コンテキストインスタンスを渡す代わりに、必要な数のコンテキストインスタンスを作成できるコンテキストファクトリを渡します。リポジトリと同じです。ファクトリを使用して、オンデマンドで新しいリポジトリインスタンスを作成できます。
例を使用して編集します。
EFv4.1Update1を使用していると仮定しましょう。新しいインターフェースを提供しますIDbContexFactory<TContext>
。次のようにクラスを定義できます。
public class YourClass
{
private readonly IDbContextFactory<IYourContext> _factory;
public YourClass(IDbContextFactory<IYourContext> factory)
{
_factory = factory;
}
public void Operation1()
{
using (IYourContext context = _factory.Create())
{
RepositoryA repository = new RepositoryA(context);
RepositoryB repository = new RepositoryB(context);
...
}
}
public void Operation2()
{
using (IYourContext context = _factory.Create())
{
RepositoryA repository = new RepositoryA(context);
RepositoryB repository = new RepositoryB(context);
...
}
}
}
これは、コンテキスト用にファクトリを渡す例でしたが、必要に応じてリポジトリに対しても同じことができます。