Что ж, я не эксперт в области сущностей, но отвечаю с точки зрения хранилища и единицы работы.
Для начала, избегайте ненужной оболочки дополнительного хранилища generi c, поскольку вы уже используете полный ОРМ. Пожалуйста, обратитесь к этому ответу.
, но в. NET Ядро У меня нет транзакции DbContextTransaction.
Важно DbContextTransaction
но не ключ для реализации единицы работы в этом случае. Что важно, это DBContext
. DBContext
отслеживает и сбрасывает изменения. Вы звоните SaveChanges
на DBContext
, чтобы сообщить, что вы сделали.
Я хотел бы сделать эту транзакцию
Я уверен, что должно быть что-то доступное для замените DbContextTransaction
или для представления транзакции.
Один из способов, предложенных Microsoft , заключается в следующем:
context.Database.BeginTransaction()
, где context
is DbContext
.
Другой способ объяснен здесь .
, также избегайте использования SaveChangesAsyn c для всех участвующих репо
Это возможно. Не кладите SaveChanges
в репозитории. Поместите это в отдельный класс. Добавьте этот класс в каждый конкретный репозиторий / generi c. Наконец, просто позвоните SaveChanges
один раз, когда вы закончите. Для примера кода, вы можете взглянуть на этот вопрос. Но в коде этого вопроса есть ошибка, которая исправлена в ответе, который я ему дал.