Некоторые из вас могут быть знакомы с библиотекой DbContextScope, которая позволяет вам вкладывать области в код, и разрешить этим областям использовать общий DbContext. Идея состоит в том, что DbContext управляется за вас библиотекой области видимости, и вместо вызова SaveChanges () в контексте вы вызываете SaveChanges () в области. Волшебство происходит потому, что область видимости будет сохранять все изменения в контексте только при внешнем вызове SaveChanges (), поэтому все вложенные операции, выполняемые в DbContext, сохраняются в одной транзакции на уровне внешней области.
Теперь, когда DI является первоклассным гражданином .NET Core, кажется, что области видимости также стали важной частью экосистемы .NET Core, и команда EF Core, зная об этом, реализовала область видимости, основанную на разрешении внедрения DbContexts с помощью система DI и (я предполагаю) позволяет сохранять изменения на уровнях области видимости, а не каким-то образом непосредственно в DbContexts.
Итак, мой вопрос таков:
- Каков соответствующий способ совместного использования DbContext через область, позволяющий управлять SaveChanges () на уровне области, а не на уровне кода, который обычно вызывает SaveChanges () в DbContext?
- Есть ли в EF Core новые механизмы, которые управляют этим за вас, так же, как DbContextScope сделал это для вас как сторонняя библиотека?
- Спасите меня от драмы и избавьте меня от лекций о том, почему, по вашему мнению, UOW необходимо внедрить в дополнение к EF. Спасибо, до свидания.
ОБНОВЛЕНИЕ: по состоянию на 6/2020 существует несколько форков DbContextScope, которые работают с EF Core 3.
ОБНОВЛЕНИЕ: Форки этого проекта можно посмотреть здесь: https://github.com/mehdime/DbContextScope/network
Существует несколько версий EF Core 3 ... Я еще не пробовал, но готово.