如何解决“由于会话中有其他线程在运行,所以不允许新事务”异常

时间:2019-07-04 10:04:14

标签: entity-framework transactions

我遇到了EF无法执行SaveChanges并引发异常的问题:由于会话中还有其他线程在运行,因此不允许新事务。

让我们描述一下我的情况:

  1. 创建了Windows服务应用程序。这是测试代码。

    static void Main()
    {
        new MyService().RunTest();
    }
    public void RunTest()
    {
        RunInitialization();
        RunTask();
    }
    
  2. RunTask 方法中,以下行将实体更新为DB。

    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方法实例化的。

能帮我吗?非常感谢你!

0 个答案:

没有答案