A DbContext
должен жить для одной бизнес-операции (единицы работы), не более того. Бизнес-транзакция обычно представляет собой запрос, страницу или форму.
Вам действительно нужно прочитать документацию по Entity Framework: Работа с DbContext .
Я бы не создал экземпляр для каждого репозитория, поскольку бизнес-транзакция может управлять несколькими репозиториями.
Вы можете вставить контекст в свой репозиторий:
public class BaseRepository
{
private IConfigurationContext context;
public BaseRepository(IConfigurationContext context)
{
this.context = context;
}
//...
}
Измените свой завод, чтобы он каждый раз создавал экземпляр:
public interface IConfigurationContextFactory
{
IConfigurationContext CreateContext();
}
// ...
public ConfigurationContext CreateContext()
{
return new ConfigurationContext(connectionString);
}
Затем настройте свой преобразователь зависимостей, чтобы ввести IConfigurationContext
на единицу работы. Предположим, вы работаете над приложением ASP.NET, используя единство.
container.RegisterType(
//Instance per http request (unit of work)
new PerRequestLifetimeManager(),
//Create using factory
new InjectionFactory(c => c.Resolve.CreateContext()));
Не забудьте позвонить SaveChangesAsync
в конце вашей бизнес-транзакции, когда это необходимо: операция выполнена успешно, а модификации должны быть сохраняется.