У меня проблема с использованием нескольких контекстов одного соединения в EFCore.Буду очень признателен, если кто-нибудь сможет мне помочь - PullRequest
0 голосов
/ 16 февраля 2019

Я столкнулся с проблемой использования нескольких контекстов одного и того же соединения в 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), чтобы зарегистрировать два контекста в одной транзакции.Я надеюсь, что кто-то может мне помочь.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Эта проблема была решена.Вышеупомянутый случай может нормально работать с базой данных SqlServer, но база данных MYsql сгенерирует вышеприведенное исключение.

0 голосов
/ 16 февраля 2019

Я думаю, ты не можешь сделать это так.Вы создаете контекст con1, и после этого вы создаете транзакцию из win con1, связанной с подключением.Вот почему при создании con2 и использовании транзакции из con1 возникает проблема.

И для этого теста очень странно использовать транзакции.Потому что, когда вы манипулируете данными в контексте, они будут работать в одной транзакции.И когда вы вызываете SaveChanges, это похоже на коммит для транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...