Ok, donc je reçois cette erreur des lignes:Erreur LINQ to SQL erratique: "l'opération ne peut pas être effectuée pendant un appel à SubmitChanges."
System.Data.Linq.DataContext.CheckNotInSubmitChanges() +42
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +54
Ce que je fais est suivi de l'état et la connexion à chaque demande d'une application. L'application rend la sortie dans Json, Xml et Html.
La chose est l'erreur est erratique. Cela n'arrive que quelques fois. L'erreur a commencé à se produire lorsque j'ai commencé à faire des requêtes Ajax. J'ai été en mesure de déterminer que l'erreur se produit plus fréquemment avec les demandes rapides (c'est-à-dire si je clique sur un lien à plusieurs reprises).
Je crée une instance distincte de DataContext chaque fois que j'appelle le service qui lance l'erreur. J'ai vraiment du mal à comprendre quelle est la question ici et j'apprécierais vraiment toute orientation et/ou explication sur ce qui se passe. Je vous remercie.
* EDIT: **
[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
Les méthodes mentionnées sont:
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();
}
Toute la classe de service de session ne fait qu'appeler SqlXmlSessionStore.UpdateSession (session) si la session est en db et active, ou SqlXmlSessionStore.InsertSession (session) si la requête est nouvelle et l'identifiant de session est manquant ou unique.
J'ai essayé de créer une nouvelle instance de DataContext chaque fois que j'ai fait un SubmitChanges(), mais cela m'a empêché d'avoir un objet Connection, même lorsque je tire le même conn. chaîne de paramètres. Cela pourrait-il être quelque chose à voir avec ma machine locale? Bon, alors j'ai fait quelque chose qui fonctionne, mais je ne suis pas sûr s'il y aura un problème avec ça que je ne prévois pas.
Je n'autorise le DataContext à soumettre qu'une seule fois. J'ai accompli en changeant les SubmitChanges() code:
private bool _canSubmit = true;
bool SubmitChanges(){
if(_canSubmit)
{
_sqlContext.SubmitChanges(ConflictMode.FailOnFirstConflict);
_canSubmit = false;
return _sqlContext.ChangeConflicts.Count == 0;
}
return false;
}
Cela semble encore comme un moyen très très hacky pour que cela fonctionne, et je voudrais aller au fond de la question, donc s'il vous plaît aviser si Quelqu'un a une idée de comment résoudre ce problème.
Quelle erreur? Pouvez-vous poster le texte de l'exception? et une partie du code dans le DataContext en utilisant() –