不允许新交易实体框架6

时间:2019-05-08 15:05:19

标签: c# entity-framework

在.NET 4.0和Web API上的ASP.NET Webforms应用程序中,我尝试向数据库添加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 个答案:

答案 0 :(得分:1)

代替System.Threading.Tasks.Task.Run(() => SaveOnDatabase(model, utente));,使用

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

然后调用await SaveOnDatabase(model, utente)