Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

System.Data.Entity.Infrastructure.CommitFailedException:multithreading C# e SQL Server 2012

Ero solito affrontare lo stesso problema. Se l'app con thread utilizza lo stesso oggetto di contesto per tutti i thread, dobbiamo affrontare questo tipo di problemi. Crea oggetti di contesto separati per ogni thread. Potresti aggiungere un po 'più di carico sulla tua RAM ma dà chiarezza sugli stati delle entità in Context.

List<Task> tasks = new List<Task>();
foreach (var item in list)
{
   ObjectContext oContext = new ObjectContext("MyConnection");
   Task t = Task.Factory.StartNew(() =>
   {
      this.Update(item,oContext);
   });
   tasks.Add(t);
}

Task.WaitAll(tasks.ToArray());