Моя проблема в том, что я хочу иметь операции с двумя объектами DbContext (оба созданы с помощью dotnet ef dbcontext scaffold
с использованием первого подхода модели).
Я имею дело с архитектурой, которая должна быть модульной, поэтому у меня есть абстрактный базовый класс, который может вставлять определенные таблицы, которые всегда одинаковы. Даже модель и контекст находятся в глобальном проекте, поэтому каждый проект может ссылаться на них напрямую.
я пытаюсь начать транзакцию, а затем вызвать базовый класс для вставки базовых таблиц, которые всегда одинаковы для одной и той же транзакции. После этого я приступаю к сохранению остальных операций, которые отличаются от проекта к проекту.
Везде в Интернете, даже на stackoverflow и msdn.com, я нахожу способ сохранить объект транзакции, возвращаемый context.Database.BeginTransaction()
, и передать его второму контексту с помощью context.Database.UseTransaction(tran.GetDbTransaction())
.
ссылки:
https://docs.microsoft.com/en-us/ef/core/saving/transactions#share-connection-and-transaction
Транзакция между контекстами
Проблема в том, что компилятор говорит мне, что тип, возвращаемый BeginTransaction()
, не имеет члена с именем GetDbTransaction()
.
Простая передача возвращаемого объекта в UseTransaction()
не будет компилироваться, так как компилятор не может преобразовать Microsoft.EntityFrameworkCore.Storage.IDbContextTransaction
(возвращается BeginTransaction()
в System.Data.Common.DbTransaction
(необходимо UseTransaction()
)
эта ошибка кажется мне такой простой, но почему-то я не могу найти в Интернете ничего, почему мой IDbContextTransaction
не имеет этого метода.