在.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)
{
}
}
答案 0 :(得分:1)
代替System.Threading.Tasks.Task.Run(() => SaveOnDatabase(model, utente));
,使用
async Task SaveOnDatabase(ComponibileCreate model, string utente) {
...
await _ctx.SaveChangesAsync();
}
然后调用await SaveOnDatabase(model, utente)