Vit*_*eis 2 c# linq asp.net .net-3.5 sql-server-2008
aspx.cs代码: 代码本身非常大,这里的代码是虚构的,但它看起来(重要的部分)是这样的:
foreach (Transaction trans in vTransactionList)
{
switch (trans)
{
case 201: codehere; break;
case 202: codehere; break;
case 203:
vProcesso.MarcaEnvioServico(
trans.ProcessId,
trans.CodTrans);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
业务类方法:
RENDataContext db = new RENDataContext();
Processo update = tabela.SingleOrDefault(
x => x.CodTrans == pCodTrans);
update.SentDate= DateTime.Now;
update.ProcessId = pProcessId;
update.LogUsuario = pUsuario_Id;
update.LogVersaoRegistro = servico.LogVersaoRegistro + 1;
update.LogDataAlteracao = DateTime.Now;
db.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
有时(很频繁我执行此代码时出现此错误(sqlserverexception):"服务器无法恢复交易"再次,它只是随机的,有时执行有时它没有当它失败首先它不断失败的.一段时间.
我正在使用存储过程来更新表而不是LINQ代码,并且发生了同样的问题.
您可能想查阅此链接: 服务器无法恢复事务.我在此错误中看到的内容摘要是使用单个连接执行多个命令.然后,根据已提交或回滚的SQL Server,客户端代码会对仍然有效的事务感到困惑.在查看业务类方法的代码时,我注意到上下文不在using语句中.上下文类应该实现IDisposable,因此在使用上下文时应该调用Dispose.您可以尝试将代码更改为:
using(RENDataContext db = new RENDataContext()){
Processo update = tabela.SingleOrDefault(
x => x.CodTrans == pCodTrans);
update.SentDate= DateTime.Now;
update.ProcessId = pProcessId;
update.LogUsuario = pUsuario_Id;
update.LogVersaoRegistro = servico.LogVersaoRegistro + 1;
update.LogDataAlteracao = DateTime.Now;
db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
并查看是否不能解决您的问题.
| 归档时间: |
|
| 查看次数: |
5123 次 |
| 最近记录: |