Sascha Baumann: Datensatz vor dem Speichern auf Änderung vergleichen!

Beitrag lesen

Hi Tom,

ich glaube immernoch das Mehrbenutzerfähigkeit garnicht Bestandteil der ursprünglichen Frage war und vielleicht für den Kollegen auch gar kein Thema ist. Konzeption für mehrere konkurierende Benutzer ist nicht ganz so trivial wie Du schon erwähnt hast, und erfordert ja auch ein gewisses maß an definition des Programmverhaltens (Was passiert im Frontend, Wie ist der Flow etc.).
Nicht für jedes kleine Projekt ist das notwendig.

Die Unterscheidung Update oder Delete geht für mich meist aus der ID des Datensatzes hervor, den ich in der Regel mit ins Objekt packe. Ist sie vorhanden, handelt es sich dabei um ein Update, ansonsten wird der Datensatz neu angelegt. Auch hier natürlich nicht so trivial wenn es um mehrere Benutzer geht.

Ich finde es übrigens gut, eventuelle Probleme (Was passiert bei mehreren Benutzern) bei der Antwort aufzuzeigen. Versteh mich also nicht falsch. Aber die eigentliche Antwort auf die Ursprüngliche Frage sollte dabei nicht aus den Augen verloren werden. Und das passiert, wenn ich mir das Forum so anschaue, leider viel zu oft.

Cheers
Sascha

ich werde einfach mal die Frage beantworten und die Schulstunde den Kollegen überlassen :o)
Wenn ich Daten aus der Datenbank hole, landen die bei mir gewöhnlich in einem Objekt (Zum Beispiel "Kunde", "Rechnung" etc).
Diesem Objekt gebe ich eine Boolean-Eigenschaft IsPersisted mit, die beim befüllen aus der Datenbank auf "True" gesetzt wird.
In den Settern der anderen Eigenschaften wird geschaut ob der übergebene Wert ungleich dem vorhandenen ist, und wenn ja die IsPersisted-Eigenschaft auf "False" gesetzt.

Wenn es jetzt ans speichern geht weiß ich, ob eine Änderung (Wohlgemerkt, eine  Änderung der bereits geladenen Daten) durchgeführt wurde (IsPersisted=False) und kann mich entscheiden was ich tue.

Und jetzt kommt der eigentlich spannende Teil. Was tust Du anshließend beim "Persistieren" deiner Daten aus dem Objekt?

Wenn DU jetzt das, was ich geschrieben habe zum Thema aufmerksam durchliest und in deine Objektdefinition einfließen lässt, dann änderst Du deine "Persisted"-Eigenschaft von Boolean auf einen numerischen Wert oder NULL. NULL würde bedeuten, dass in der DB noch keine Daten vorhanden waren und der Datensatz beim Speichern neu angelegt werden müsste, ein numerischer Wert käme aus der DB. Wenn ein numerischer Wert vorhanden ist, muss der beim Speichern noch übereinstimmen mit dem Wert in der DB und muss beim Speichern geändert werden. Bringe das deinem Objekt bei.

Wenn Du diese kleinen Änderungen durchgeführt hast, ist auch dein System in Zukunft mehrbenutzerfähig.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg