只需使用两种不同的上下文。没有比创建新上下文更好的解决方案来重置上下文。如果您正在与当前架构作斗争,只需对其进行改进以支持新场景。而不是传递上下文实例,而是传递一个上下文工厂,它将能够根据需要为您创建尽可能多的上下文实例。与存储库相同 - 您可以让工厂按需创建新的存储库实例。
编辑示例:
假设您使用的是EFv4.1 Update 1。它提供了新的界面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);
...
}
}
}
这是您将工厂传递给上下文的示例,但如果您愿意,您可以对存储库执行相同的操作。