Une nouvelle transaction n’est pas autorisée car d’autres threads s’exécutent dans la session LINQ To Entity

Des idées sur pourquoi cela pourrait casser?

foreach (var p in pp) { ProjectFiles projectFile = (ProjectFiles)p; projectFile.Status = Constants.ProjectFiles_ERROR; projectFile.DateLastUpdated = DateTime.Now; context.SaveChanges(); } 

J’ai lu que le contournement du problème consiste à récupérer les résultats en une fois avant la boucle foreach.

Mais je n’ai pas fait ça? “pp” est la collection de résultats dans mon cas

La variable pp n’est pas une collection d’objects, c’est un énumérateur qui peut renvoyer des objects. Lorsque vous utilisez l’énumérateur, la source doit restr ouverte.

Utilisez la méthode ToList pour réaliser l’énumérateur dans une collection. Cela lira tous les éléments de l’énumérateur et fermera la connexion à la source, afin que vous puissiez utiliser la connexion pour d’autres choses.

 foreach (var p in pp.ToList()) 

Ce qui se passe, c’est que vous utilisez une connexion SQL pour parcourir une collection d’entités de firebase database, puis utiliser une autre connexion pour enregistrer les modifications. Cela se produit parce que vos classes sont fondamentalement “mariées” à une instance de votre connexion à la firebase database et ne peuvent pas être modifiées par une autre.

Pour contourner ce problème, appelez .ToList () sur votre collection avant de l’itérer.

Et pendant que vous y êtes, appelez context.SaveChages() une seule fois après la fermeture de la boucle pour accélérer le code.