我遇到了EF无法执行SaveChanges并引发异常的问题:由于会话中还有其他线程在运行,因此不允许新事务。
让我们描述一下我的情况:
创建了Windows服务应用程序。这是测试代码。
static void Main()
{
new MyService().RunTest();
}
public void RunTest()
{
RunInitialization();
RunTask();
}
在 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;
}
当我调试程序时,该服务在SaveChanges行中引发了异常。我很困惑,因为我没有使用多线程编程。为什么它告诉我“ 不允许新事务,因为会话中有其他线程在运行”。
注意:ERPEntities是服务类中的全局变量,它是通过RunInitialization方法实例化的。
能帮我吗?非常感谢你!