Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

System.Data.Entity.Infrastructure.CommitFailedException:C#-Multithreading und SQL Server 2012

Früher hatte ich das gleiche Problem. Wenn die Thread-App dasselbe Kontextobjekt für alle Threads verwendet, sind wir mit dieser Art von Problemen konfrontiert. Erstellen Sie separate Kontextobjekte für jeden Thread. Möglicherweise fügen Sie Ihrem RAM etwas mehr Last hinzu, aber es gibt Klarheit über Zustände von Entitäten im Kontext.

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());