Dans notre logique métier, nous avons parfois des méthodes définies quelque chose comme ceci:
User.ResetCourse(Course courseToReset)
Le problème est que l'utilisateur et le cours sont des objets proxy Entity Framework. Cela signifie que lorsque nous atteignons les propriétés de navigation sur User ou Course, cela peut causer un énorme succès à la base de données car ces objets ne sont pas IQueryable, donc il les parcourt normalement.
Pour résoudre ce problème, nous avons changé la signature en:
User.ResetCourse(MyDBContext db, Course courseToReset)
Cela signifie que nous pouvons interroger directement la base de données pour apporter les modifications dont nous avons besoin de manière efficace, mais passer le contexte de la base de données à un objet métier semble tellement mal.
Nous avons ensuite migré vers l'utilisateur une couche de service, ce qui signifie que nous avons quelque chose comme:
CourseService.ResetForUser(Course courseToReset, User forUser)
Ce service fait référence au DBContext injecté lors de la création, mais maintenant nos objets métier ne sont que des sacs de données sans comportement (c'est-à-dire un modèle de domaine anémique).
Comment éviter cela?