Für ein sauberes Datenmodell, ich bin hin und her auf diesem los ...Entity Framework Best Practices: Welche Schicht sollte SaveChanges() aufrufen?
einen Genehmigungs-Workflow als Beispiel, lassen Sie sich in meiner Web-Anwendung, sie habe eine Seite, die für ein MyEntityObject
einen Benutzer-Flag läßt die Genehmigung. MyEntityObject
hat einige Eigenschaften, die den Genehmigungs-Workflow steuern, also habe ich eine gemeinsame Hilfsmethode namens FlagForApproval(MyEntityObject eo)
.
Sollte die Seite Anruf FlagForApproval() notwendigen Eigenschaften nur setzen und rufen Sie dann Savechanges() wenn es fertig ist, oder sollte FlagForApproval() die Änderungen speichern?
Wenn die Dienstprogrammmethode Änderungen speichert, scheint es etwas mehr zu tun, als es verlangt wird (was wäre, wenn es nur ein Schritt in einer Reihe von Operationen wäre?), Aber gleichzeitig die Seite SaveChanges aufzurufen () und die Daten an die Datenbank zu übermitteln scheint, als könnte es als zu nahe an Datenschicht Verantwortlichkeiten betrachtet werden.
Gedanken?
(Update: FWIW, so weit ich mit Dienstprogramm-Methoden aufrufen wurden Savechanges(), auf diese Weise die Seite nur ein Satz von Ausnahmen hat zu behandeln, ob die Validierung oder Daten.)
Ich glaube, Sie sind 100% richtig - es ist sehr sauber ist Savechanges in BLL zu halten und lassen Sie ihn entscheiden, ob sie auszuführen speichern oder nicht. Aber ich kann mindestens 2 Situationen sehen, in denen eine Ausnahme gemacht werden kann: 1) Das Projekt erfordert Validierung auf der Modellseite - es ist nicht BLL, aber es muss entscheiden, ob Änderungen gespeichert werden sollen oder nicht. 2) SaveChanges wird nach wirklich einfachem Code ausgeführt (Hinzufügen einer Entität, Aktualisieren einzelner Eigenschaften einer vorhandenen Entität). In meinem Fall wäre es DAL. Also denke ich, die beste Lösung ist, Ihrem Instinkt und/oder Ihrer Erfahrung zu folgen. –