Как решить «Новая транзакция не разрешена, потому что в сеансе запущены другие потоки» Исключение - PullRequest
0 голосов
/ 04 июля 2019

Я столкнулся с проблемой, заключающейся в том, что EF не может выполнить SaveChanges, и выдал мне исключение: Новая транзакция не разрешена, поскольку в сеансе запущены другие потоки.

Давайте опишеммоя ситуация:

  1. Создано приложение службы Windows.Вот код для тестирования.

    static void Main()
    {
        new MyService().RunTest();
    }
    public void RunTest()
    {
        RunInitialization();
        RunTask();
    }
    
  2. В методе RunTask следующая строка предназначена для обновления сущности в БД.

    var project = UpdatePICProjects(messageObject.ProjectPKID, existingProjectUID);
    

    Метод RunTask выглядит следующим образом:

    private PICProject UpdatePICProjects(int projectPKID, long projectUID)
    {
        var project = ERPEntities.PICProject.FirstOrDefault(p => p.ID == projectPKID);
        if (project == null)
        {
            Print($"Cannot find the project '{projectPKID}' in database.");
        }
        else
        {
            project.DeliveriesTaskID = projectUID + 30000000000;
        }
    
        if (ERPEntities.ChangeTracker.HasChanges()) ERPEntities.SaveChanges();
    
        return project;
    }
    
  3. При отладке программы служба выдает исключение в строке SaveChanges.Я запутался, потому что Я не использую многопоточное программирование .Почему он сказал мне, что " Новая транзакция не разрешена, потому что в сеансе работают другие потоки ".

    Примечание : ERPEntities - глобальная переменная в службекласс, который создается в методе RunInitialization.

Не могли бы вы мне помочь?Большое спасибо!

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