Я столкнулся с проблемой использования нескольких контекстов одного и того же соединения в EFCore.Сообщение об ошибке было следующим: указанная транзакция не связана с текущим соединением.Можно использовать только транзакции, связанные с текущим соединением.
Прежде всего, я проверил это со ссылкой на следующие документы.https://docs.microsoft.com/en-us/ef/core/saving/transactions
public void Get()
{
var options = new DbContextOptionsBuilder<testContext>()
.UseMySql("Server=127.0.0.1;User Id=test;Password=test123456!;Database=test")
.Options;
using (testContext con1 = new testContext(options))
{
using (var transaction = con1.Database.BeginTransaction())
{
con1.User.Add(new User() { Address = "aaaaaaaaaaaaaaaaa", Name = "aaaaaa", Tel = "1111111111" });
con1.SaveChanges();
using (testContext con2 = new testContext(options))
{
con2.Database.UseTransaction(transaction.GetDbTransaction());
con2.Userbook.Add(new Userbook() { Bookbar = "232323", Bookname = "1212", Userid = 1 });
con2.SaveChanges();
}
transaction.Commit();
}
}
}
Произошла ошибка при запуске к: con2.База данных.UseTransaction (транзакция. GetDbTransaction ()).
Указанная транзакция не связана с текущим соединением.Могут использоваться только транзакции, связанные с текущим соединением.
Во-первых, в демонстрационном коде два экземпляра контекста CON1 и con2 используют одинаковые параметры объекта соединения, что соответствует соответствующему синтаксису EFCore и соответствуетс официальным обозначением DEMO вышеупомянутых ссылок, но я не понимаю, почему произошла ошибка при добавлении DbContext.База данных.Используйте API-интерфейс Transaction (DbTransaction), чтобы зарегистрировать два контекста в одной транзакции.Я надеюсь, что кто-то может мне помочь.