Ich habe gelesen, dass viele Leute sagen, dass Modelltypen nicht View, sondern stattdessen ViewModel-Typen enthalten sollten. Gibt es ein Beispiel, wo ich sehen kann, wie die Synchronisation zwischen ViewModel und Model Daten mit Entity Framework durchgeführt wird. Insbesondere benötige ich ein Beispiel für eine editierbare Sammlung (Beispiel: DataGrid oder DataForm, die die Kundenliste anzeigen).
So, so etwas
aber mit editierbaren Sammlungsdaten, nicht nur schreibgeschützt.
Ein Beispiel für das, was mich interessiert:
1) Ein Raster muss Produkte zeigen. 3 Spalten werden angezeigt:
Type ist ein Enum, sagen wir: ProductType {TypeA, TypeB}. Wenn Sie Enum schwierig zu implementieren finden, dann haben Sie ein int, es ist kein Problem. Wichtig ist, dass Type nicht geändert werden kann, wenn Product bereits als Referenz in einer anderen Tabelle verwendet wurde. Ich verwende diese Regel, da Sie dies nicht mit Attributen (Datenanmerkungen) tun können, und dies muss auf der ViewModel-Seite geschehen.
Jede Eigenschaft einer Produktklasse muss an die CustomerViewModel-Eigenschaft gebunden sein. Sie können einige Regeln für Code und Name eingeben:
Code einzigartig Name: Erforderlich, MaxLength (30)
BEARBEITEN: Mein Hauptanliegen ist, wie wir die Synchronisierung zwischen ViewModel und EF Model in Batch-Updates durchführen. Ein Beispiel wäre:
1) Wenn wir das Produkt entfernen, wenn wir es aus der ProductViewModel-Sammlung und dem DBContext entfernen, was passiert, wenn der Benutzer den Vorgang abbricht (einen Fehler gemacht oder irgendetwas anderes)? Müssen wir alle Produkte aus der Datenbank neu laden und alle ProductViewModels neu erstellen?
2) Der Benutzer ändert das Produkt und versetzt das Produkt in einen ungültigen Zustand (denken Sie daran, dass ein ungültiger Zustand für ein Objekt noch akzeptabel ist, es sei denn, wir entschließen uns, es in die Datenbank zu übertragen). Dann bewegt der Benutzer den Cursor zu einem anderen Produkt, ändert es (dieses Produkt bleibt im gültigen Zustand) und führt den Speicherbefehl aus. Was sollten wir zu diesem Zeitpunkt tun?
Ich habe meine Lösungen für all diese Fragen, aber ich bin mir nicht sicher, ob sie richtig sind, gibt es bessere Wege, deshalb fragte ich nach anderen Meinungen von Leuten, die diese Methode in der täglichen Arbeit verwenden.
>Wenn Sie eine Batch-Update-Fähigkeit benötigen, benötigt die Anwendung einige Updates:
1) Rufen Sie SaveChanges nicht über ProductViewModel auf. Änderungen sollten nur gespeichert werden, wenn Sie auf die Schaltfläche "Speichern"
klicken2) Im MainViewModel müssen Sie zwei weitere Sammlungen pflegen: für neue Objekte und gelöschte Objekte. Wenn der Benutzer die Schaltfläche "Speichern" drückt, werden gelöschte Objekte aus der Datenbank entfernt und neue Objekte werden zur Datenbank hinzugefügt.
3) Wenn der Benutzer die "Abbrechen" -Taste drückt, sollten alle Änderungen rückgängig gemacht werden. I.e. Alle Felder sollten in ihren ursprünglichen Zustand zurückversetzt werden, gelöschte Objekte sollten wieder hinzugefügt werden und neue Elemente sollten gelöscht werden
Siehe Update auf github: Ссылка