UnKnOwN_86
Ensign
- Registriert
- Apr. 2010
- Beiträge
- 192
Ich habe ein kleines Verständnis Problem mit Pessimistic Locking und hoffe ihr könnt mir helfen.
In dem Projekt verwende ich Entity Framework 5.0 als Data Acccess Layer.
Nun möchte ich gerne im User Interface, ein DataGrid mit Datensätzen ausgeben.
Wenn ich nun einen Datensatz markiere, werden im unteren Bereich des Forms dessen Eigenschaften geladen und in Textboxen/Comboboxen etc. im read-only state angezeigt.
Etwas weiter unterhalb befindet sich dann ein "Edit" Button.
Wenn nun User A diesen Edit Button betätigt möchte ich diesen einen Datensatz (nicht die komplette Tabelle), für weitere Update/Delete operation sperren sowie die Textboxen/Comboboxen etc. zum bearbeiten freigeben (read-only entfernen).
Dies soll wenn möglich so aussehen, dass wenn User B den Datensatz im Grid anklickt der Edit Button bereits gesperrt ist.
Also dass im RowChanged Ereignis eine Überprüfung statt findet ob der gewählte Datensatz gesperrt ist oder nicht und je nachdem den Edit Button freigibt.
Im Internet findet man unzählige Beispiele die ungefähr dieses Schema verwenden:
Mein Problem mit diesem ist das dieser Code in einem ausgeführt wird und dies in meinem Szenario nicht der Fall ist.
Da bei mir das Locking des Datensatz beim Klick auf Edit statt finden soll, User A gibt dann Daten und geht Kaffee trinken - kommt 30 Minuten später (im Extrem Fall) und klickt dann erst auf Speichern. Während dieser ganzen Zeit soll der Datensatz zum bearbeiten für User B gesperrt sein.
Zu meinen Fragen:
Wie mache ich diese Trennung von Sperren des Datensatzes und der Update Methode?
Wie kann ich überprüfen ob der jeweilige Datensatz gesperrt ist oder nicht?
Hoffe ihr könnt mir helfen.
In dem Projekt verwende ich Entity Framework 5.0 als Data Acccess Layer.
Nun möchte ich gerne im User Interface, ein DataGrid mit Datensätzen ausgeben.
Wenn ich nun einen Datensatz markiere, werden im unteren Bereich des Forms dessen Eigenschaften geladen und in Textboxen/Comboboxen etc. im read-only state angezeigt.
Etwas weiter unterhalb befindet sich dann ein "Edit" Button.
Wenn nun User A diesen Edit Button betätigt möchte ich diesen einen Datensatz (nicht die komplette Tabelle), für weitere Update/Delete operation sperren sowie die Textboxen/Comboboxen etc. zum bearbeiten freigeben (read-only entfernen).
Dies soll wenn möglich so aussehen, dass wenn User B den Datensatz im Grid anklickt der Edit Button bereits gesperrt ist.
Also dass im RowChanged Ereignis eine Überprüfung statt findet ob der gewählte Datensatz gesperrt ist oder nicht und je nachdem den Edit Button freigibt.
Im Internet findet man unzählige Beispiele die ungefähr dieses Schema verwenden:
Code:
using (var scope = new TransactionScope(...))
{
using (var context = new YourContext(...))
{
var customer =
context.ExecuteStoreQuery<Customer>("SELECT ... FROM Customers WITH (UPDLOCK) WHERE ...");
// rest of your logic while record is locked
scope.Complete();
}
}
Mein Problem mit diesem ist das dieser Code in einem ausgeführt wird und dies in meinem Szenario nicht der Fall ist.
Da bei mir das Locking des Datensatz beim Klick auf Edit statt finden soll, User A gibt dann Daten und geht Kaffee trinken - kommt 30 Minuten später (im Extrem Fall) und klickt dann erst auf Speichern. Während dieser ganzen Zeit soll der Datensatz zum bearbeiten für User B gesperrt sein.
Zu meinen Fragen:
Wie mache ich diese Trennung von Sperren des Datensatzes und der Update Methode?
Wie kann ich überprüfen ob der jeweilige Datensatz gesperrt ist oder nicht?
Hoffe ihr könnt mir helfen.
Zuletzt bearbeitet: