Хорошо, я получаю эту ошибку из строк:
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 (сеанс), если сеанс находится в базе данных и активен, или SqlXmlSessionStore.InsertSession (сеанс), если запрос новый, а идентификатор сеанса отсутствует или уникален.
Я пытался создавать новый экземпляр DataContext каждый раз, когда выполнял SubmitChanges (), но это приводило к тому, что у меня не было объекта Connection, даже когда я получал одно и то же соединение. Строка из настроек. Может ли это быть что-то связанное с моей локальной машиной?
Хорошо, я сделал что-то, что работает, но я не уверен, что возникнет проблема с этим, которую я не предвидел.
Я разрешаю DataContext отправлять только один раз. Я сделал это, изменив код SubmitChanges () на:
private bool _canSubmit = true;
bool SubmitChanges(){
if(_canSubmit)
{
_sqlContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
_canSubmit = false;
return _sqlContext.ChangeConflicts.Count == 0;
}
return false;
}
Это все еще кажется очень и очень хакерским способом, чтобы это сработало, и я хотел бы докопаться до сути вопроса, поэтому, пожалуйста, посоветуйте, если у кого-нибудь есть идеи, как это исправить.