sintaxis inner framework consultas c# linq linq-to-entities

c# - inner - Nueva transacción no está permitida porque hay otros hilos ejecutándose en la sesión LINQ To Entity



linq to entities join (2)

¿Alguna idea sobre por qué esto podría estarse rompiendo?

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

Leí que la solución al problema es recuperar los resultados de una vez antes del ciclo foreach.

¿Pero no hice eso? "pp" es la colección de resultados en mi caso


La variable pp no es una colección de objetos, es un enumerador que puede devolver objetos. Mientras usa el enumerador, la fuente debe permanecer abierta.

Use el método ToList para ToList el enumerador en una colección. Eso leerá todos los elementos del enumerador y cerrará la conexión a la fuente, para que pueda usar la conexión para otras cosas.

foreach (var p in pp.ToList())


Lo que sucede es que está utilizando una conexión SQL para iterar sobre una colección de entidades de BD, y luego usar otra conexión para guardar los cambios. Esto sucede porque tus clases están básicamente "casadas" con una instancia de tu conexión de db y no pueden ser cambiadas por otra.

Una forma de evitar esto es llamar a .ToList () en su colección antes de iterarla.

Y mientras lo hace, llame al context.SaveChages() solo una vez después de que el ciclo sale para acelerar el código.