Nella nostra logica aziendale abbiamo occasionalmente metodi definiti in questo modo:
User.ResetCourse(Course courseToReset)
Il problema è che sia l'utente che il corso sono oggetti proxy Entity Framework. Ciò significa che quando colpiamo le proprietà di navigazione su Utente o Corso, può causare un enorme successo al database perché quegli oggetti non sono IQueryable e quindi li scorre normalmente.
Per risolvere questo problema abbiamo cambiato la firma in:
User.ResetCourse(MyDBContext db, Course courseToReset)
Ciò significa che possiamo interrogare direttamente il database per apportare le modifiche di cui abbiamo bisogno in modo efficiente, ma passare il contesto del database a un oggetto business sembra così sbagliato.
Successivamente abbiamo migrato all'utente un livello di servizio, il che significa che abbiamo qualcosa del tipo:
CourseService.ResetForUser(Course courseToReset, User forUser)
Questo servizio ha un riferimento al DBContext inserito nella creazione, ma ora i nostri oggetti business sono solo buste di dati senza comportamento (ovvero un modello di dominio anemico).
Come possiamo evitarlo?