我的.NET项目使用SQL Server中的数据库。我正在使用Linq-to-SQL,有时当项目在项目的一部分中抛出异常(Constraint)时,当我对数据库执行另一项操作时,同样的错误会在项目的其他部分中显示。就像当我进行插入并且在删除之前有一个异常时插入会抛出删除异常,并且它一直保持这种状态,直到我关闭并再次打开项目。我的主要问题是当我的在线项目发生这种情况时,我的项目中的这个错误导致我在线测试项目中的问题(我使用相同的数据库)。我不知道这个例外是在记忆中还是其他东西,但它已经引起了很多麻烦。
当我执行错误删除(不进行级联删除)时,这是抛出我的异常
var actividad = (from ta in modeloDatos.tActividad
where ta.id_actividad == idActividad
select ta).Single()
modeloDatos.tActividad.DeleteOnSubmit(actividad);
modeloDatos.SubmitChanges();
return true;
}
catch (Exception ex)
{
return false;
}
ex = {"The DELETE statement conflicted with the REFERENCE constraint \"FK_tActividadRiesgo_tActividad\". The conflict occurred in database \"DBDESARROLLO\", table \"dbo.tActividadRiesgo\".\r\nThe statement has been terminated."}
当它进入此代码(插入)时
proceso.id_encabezado = encabezadoProceso.id_encabezado;
proceso.id_procesopadre = idProcesoPadre;
modeloDatos.tProceso.InsertOnSubmit(proceso);
modeloDatos.SubmitChanges();
catch (Exception ex)
{
return -1;
}
抛出了与我正在做的事情无关的完全相同的异常
ex = {"The DELETE statement conflicted with the REFERENCE constraint \"FK_tActividadRiesgo_tActividad\". The conflict occurred in database \"DBDESARROLLO\", table \"dbo.tActividadRiesgo\".\r\nThe statement has been terminated."}
我实际上正在使用不同的表格。
答案 0 :(得分:2)
我猜你甚至在异常之后仍然使用相同的DataContext,因此它仍然具有相同的挂起更改(更新/插入/删除),当您尝试再次提交更改时,这些相同的挂起更改将再次抛出相同的异常。
如果是这种情况,可以使用一些不同的选项来处理它,但最简单的方法就是抛弃“破碎的”datacontext(将其处理得很好)并创建一个新的。因为它是执行此操作的异常路径,所以我宁愿做一个更简单的事情,而不是更复杂的事情,可能会更快运行:)
答案 1 :(得分:0)
听起来有点像你可能正在使用会话变量显示错误,但没有为每个新页面清除错误。