さて、私は次の行からこのエラーを受け取っています:
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の新しいインスタンスを作成しようとしましたが、同じconnをプルしても、Connectionオブジェクトがありませんでした。設定からの文字列。これは私のローカルマシンと関係があるのでしょうか?
さて、私はうまくいくことをしましたが、これに私が予測していない問題があるかどうかはわかりません。
DataContextの送信を1回だけ許可します。これは、SubmitChanges()コードを次のように変更することで実現しました。
private bool _canSubmit = true;
bool SubmitChanges(){
if(_canSubmit)
{
_sqlContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
_canSubmit = false;
return _sqlContext.ChangeConflicts.Count == 0;
}
return false;
}
これはまだこれが機能するための非常にハッキーな方法のようです、そして私は問題の底に行きたいので、誰かがこれを修正する方法を知っているかどうかアドバイスしてください。