In unserer Geschäftslogik haben wir gelegentlich Methoden wie diese definiert:
User.ResetCourse(Course courseToReset)
Das Problem ist, dass sowohl Benutzer als auch Kurs Entity Framework-Proxyobjekte sind. Dies bedeutet, dass das Aufrufen der Navigationseigenschaften für Benutzer oder Kurs einen großen Treffer für die Datenbank verursachen kann, da diese Objekte nicht IQuery-fähig sind und daher normal durchlaufen werden.
Um dies zu lösen, haben wir die Signatur geändert in:
User.ResetCourse(MyDBContext db, Course courseToReset)
Dies bedeutet, dass wir die Datenbank direkt abfragen können, um die erforderlichen Änderungen auf effiziente Weise vorzunehmen, aber die Übergabe des Datenbankkontexts an ein Geschäftsobjekt scheint einfach so falsch.
Wir haben später eine Service-Schicht auf den Benutzer migriert, was bedeutet, dass wir Folgendes haben:
CourseService.ResetForUser(Course courseToReset, User forUser)
Dieser Service enthält einen Verweis auf den DBContext, der bei der Erstellung eingefügt wurde. Jetzt sind unsere Geschäftsobjekte nur noch Datentaschen ohne Verhalten (dh ein anämisches Domänenmodell).
Wie können wir das vermeiden?