Инициализируйте соединение EF Core DbContext с помощью DbConnection - PullRequest
0 голосов
/ 09 февраля 2020

Я мигрирую EF6. net Приложение FWK на Entity Framework Core 3.0. однако в моем старом проекте EF6 у меня была возможность инициализировать DbContext с использованием объекта DbConnection, он использовался для реализации единицы работы и для использования той же транзакции без изменения объекта подключения.

public MyDataContext(IDbConnection connection)
        : base((DbConnection) connection, false)
    {
    } 

однако в ядре EF У меня есть только одна опция для инициализации контекста, который с DbContextOptions, который принимает строку подключения. и это инициализирует новое соединение, и я не смогу работать с транзакцией.

СТАРЫЙ EF-код

var pipeline = endpointConfiguration.Pipeline;
        pipeline.Register(new UnitOfWorkSetupBehavior(storageSession =>
        {
            var dbConnection = storageSession.SqlPersistenceSession().Connection;
            var context = ***new MyDataContext(dbConnection);***
            context.Database.UseTransaction(storageSession.SqlPersistenceSession().Transaction);
            storageSession.SqlPersistenceSession().OnSaveChanges(x => context.SaveChangesAsync());

            return context;
        }), "Setting up unit of work");

Какая альтернатива для конструктора с объектом соединения или что действительно изменилось в EF ядро ​​DBcontext не брать соединение?

1 Ответ

2 голосов
/ 09 февраля 2020

In. Net core, Инъекция зависимостей стала краеугольным камнем в фреймворке, поэтому теперь вам не нужно инициализировать DBContext самостоятельно, вместо этого вы должны оставить его в контейнере , который по умолчанию инициализирует его с " продолжительностью жизни ", таким образом, в течение одного запроса он будет передавать один и тот же DbContext вашим службам и, таким образом, должен произойти один сбой (если вы делаете все верно, вызовите сохранение изменений только один раз в самом конце) откатите все изменения.

...