Просто используйте два разных контекста.Нет лучшего решения для сброса контекста, чем создание нового.Если вы боретесь с вашей текущей архитектурой, просто улучшите ее, чтобы поддержать новый сценарий.Вместо передачи экземпляра контекста передайте фабрику контекста, которая сможет создать вам столько экземпляров контекста, сколько вам нужно.То же самое с репозиториями - вы можете иметь фабрику для создания новых экземпляров репозитория по требованию.
Редактировать на примере:
Предположим, вы используете 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);
...
}
}
}
Это был пример, когда вы передаете фабрику для контекста, но вы можете сделать то же самое для репозитория, если хотите.