Я столкнулся с проблемой, заключающейся в том, что EF не может выполнить SaveChanges, и выдал мне исключение: Новая транзакция не разрешена, поскольку в сеансе запущены другие потоки.
Давайте опишеммоя ситуация:
Создано приложение службы Windows.Вот код для тестирования.
static void Main()
{
new MyService().RunTest();
}
public void RunTest()
{
RunInitialization();
RunTask();
}
В методе 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;
}
При отладке программы служба выдает исключение в строке SaveChanges.Я запутался, потому что Я не использую многопоточное программирование .Почему он сказал мне, что " Новая транзакция не разрешена, потому что в сеансе работают другие потоки ".
Примечание : ERPEntities - глобальная переменная в службекласс, который создается в методе RunInitialization.
Не могли бы вы мне помочь?Большое спасибо!