Новые транзакции не допускаются Entity Framework 6 - PullRequest
0 голосов
/ 08 мая 2019

В приложении ASP.NET Webforms в .NET 4.0 и веб-API я пытаюсь добавить order и orderRow в базу данных, но получаю эту ошибку:

Ошибка: новые транзакции не разрешены, так как в сеансе есть другие запущенные потоки

С клиента я запускаю сообщение Ajax на контроллере, который имеет следующий код для вставки значения в базу данных:

private readonly MyDatabaseEntities _ctx;

public ComponibileController()
{
    _ctx = new MyDatabaseEntities(@"xxx");
}

[HttpPost]
public void Post([FromBody] ComponibileCreate model)
{
    if (!ModelState.IsValid) return;

    var taskWork = System.Threading.Tasks.Task.Run(() => SaveOnDatabase(model, utente));

    ...query
    SendMailToUser(...);

    taskWork.Wait();
}

public void SaveOnDatabase(ComponibileCreate model, string utente)
{
    try
    {
        using (_ctx)
        {
            var ordine = new COM_ORDINI
            {
                ..,
            };

            foreach (var item in model.Righe.ToList())
            {
                var righe = new COM_RIGHE
                {
                   ...
                };
                ordine.COM_RIGHE.Add(righe);
            }

            _ctx.COM_ORDINI.Add(ordine);
            _ctx.SaveChanges();
        }
    }
    catch (Exception e)
    {
    }
}

1 Ответ

1 голос
/ 08 мая 2019

вместо System.Threading.Tasks.Task.Run(() => SaveOnDatabase(model, utente));, используйте

async Task SaveOnDatabase(ComponibileCreate model, string utente) {
...
await _ctx.SaveChangesAsync();
}

и звоните await SaveOnDatabase(model, utente) в действии

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