好的,所以我从以下几行中得到了这个错误:
System.Data.Linq.DataContext.CheckNotInSubmitChanges() +42
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +54
我正在做的是跟踪应用程序的状态并记录每个请求。该应用程序以 Json、Xml 和 Html 格式呈现输出。
问题是错误是不稳定的。它只会每隔几个请求发生一次。当我开始执行 Ajax 请求时,错误开始发生。我已经能够确定错误在快速请求时更频繁地发生(即,如果我反复单击链接)。
每次调用引发错误的服务时,我都会创建一个单独的 DataContext 实例。我很难弄清楚这里的问题是什么,我非常感谢任何关于正在发生的事情的指导和/或解释。谢谢你。
* 编辑 : **
[InvalidOperationException: The operation cannot be performed during a call to SubmitChanges.]
System.Data.Linq.DataContext.CheckNotInSubmitChanges() +80
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +73
Magic.Model.Sessions.SqlXmlSessionStore.SubmitChanges() in SqlXmlSessionStore.cs:17
Magic.Model.Sessions.SqlXmlSessionStore.UpdateSession(Session session) in SqlXmlSessionStore.cs:64
Magic.Web.SessionService.OpenSession(MagicRequestContext requestContext) in SessionService.cs:36
Magic.Web.SessionService.Magic.Model.Sessions.ISessionService.OpenSession(IRequestContext requestContext) in SessionService.cs:23
提到的方法有:
private bool SubmitChanges()
{
_sqlContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
return _sqlContext.ChangeConflicts.Count == 0;
}
public bool UpdateSession(Session session)
{
var record = _sqlContext.SessionRecords.Single(x => x.SessionId == session.Key);
_converter.PopulateRecordData(session, record);
return SubmitChanges();
}
如果会话在数据库中并且处于活动状态,则会话服务类所做的所有事情都是调用 SqlXmlSessionStore.UpdateSession(session),如果请求是新的并且会话 ID 丢失或唯一,则调用 SqlXmlSessionStore.InsertSession(session)。
每次执行 SubmitChanges() 时,我都尝试创建 DataContext 的新实例,但这导致我没有 Connection 对象,即使我拉同一个 conn。设置中的字符串。这可能与我的本地机器有关吗?
好的,所以我做了一些有效的事情,但我不确定这是否会出现我没有预见到的问题。
我只允许 DataContext 提交一次。我通过将 SubmitChanges() 代码更改为:
private bool _canSubmit = true;
bool SubmitChanges(){
if(_canSubmit)
{
_sqlContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
_canSubmit = false;
return _sqlContext.ChangeConflicts.Count == 0;
}
return false;
}
这似乎仍然是一种非常非常hacky的方式,我想深入了解问题的根源,所以请告知是否有人知道如何解决这个问题。