Nella nostra logica di business occasionalmente abbiamo metodi definiti come:
User.ResetCourse(Course courseToReset)
Il problema è che sia Utente che 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é tali oggetti non sono IQueryable, quindi iterano normalmente attraverso di essi.
Per risolvere questo 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 a DBContext inserito nella creazione, ma ora i nostri oggetti business sono solo sacchetti di dati senza comportamento (cioè un modello di dominio anemico).
Come possiamo evitare questo?