2012-10-25 13 views
11

Ich möchte eine Überprüfung-dann-Aktualisierung in einer atomaren Operation durchführen. Ich verwende dbcontext, um die Transaktion zu verwalten. Ich habe erwartet, eine Ausnahme zu erhalten, wenn der Datensatz von einem anderen Thread geändert wurde, aber keine Ausnahme ausgelöst wird. Jede Hilfe wäre willkommen. Hier ist meine Ausgabe:So aktivieren Sie die Parallelitätsprüfung mit EF 5.0-Code zuerst?

Thread-4: Reading... 
Thread-5: Reading... 
Thread-5: Updating destination 1 
Thread-4: Updating destination 1 
Thread-4: SaveChanges 
Thread-5: SaveChanges 

Hier ist mein Code-Schnipsel:

public static void Main(string[] args) 
{ 
    PopulateData(); 
    (new Thread(UpdateDestination1)).Start(); 
    (new Thread(UpdateDestination1)).Start(); 
} 

public static void UpdateDestination1() 
{ 
    using (var context1 = new BreakAwayContext()) 
    { 
     Console.WriteLine("Thread-{0}: Reading...", Thread.CurrentThread.ManagedThreadId); 
     var d = context1.Destinations.FirstOrDefault(); 
     Console.WriteLine("Thread-{0}: Updating destination {1}", Thread.CurrentThread.ManagedThreadId, d.DestinationId); 
     d.Name = "Thread-" + Thread.CurrentThread.ManagedThreadId; 
     try 
     { 
      context1.SaveChanges(); 
      Console.WriteLine("Thread-{0}: SaveChanges", Thread.CurrentThread.ManagedThreadId); 
     } 
     catch (OptimisticConcurrencyException) 
     { 
      Console.WriteLine("OptimisticConcurrencyException!!!"); 
      throw; 
     } 
    } 
} 

Antwort

19

Sie ConcurrencyCheck Anmerkung auf einer Eigenschaft verwenden können (http://msdn.microsoft.com/en-us/data/gg193958.aspx) oder IsConcurrencyToken() oder .IsRowversion wenn eine Eigenschaft mit fließend API Konfiguration (http://msdn.microsoft.com/en-us/data/jj591617#1.12). Normalerweise würden Sie eine Rowversion-Spalte in der Datenbank haben.

+0

Das hat funktioniert. Vielen Dank! – user1342718

+0

Dann markieren Sie es als Antwort. – Pawel

+0

Ich habe versucht. Es sagte: "Vote Up erfordert 15 Ruf". Es tut uns leid. – user1342718