Em nossa lógica de negócios, ocasionalmente temos métodos definidos algo como isto:
User.ResetCourse(Course courseToReset)
O problema é que o usuário e o curso são objetos de proxy do Entity Framework. Isso significa que, quando atingimos as propriedades de navegação em Usuário ou Curso, isso pode causar um grande impacto no banco de dados, porque esses objetos não são IQueryable; portanto, ele os percorre normalmente.
Para resolver isso, alteramos a assinatura para:
User.ResetCourse(MyDBContext db, Course courseToReset)
Isso significa que podemos consultar diretamente o banco de dados para fazer as alterações necessárias de uma maneira eficiente, mas passar o contexto do Banco de Dados para um objeto de negócios parece tão errado.
Mais tarde, migramos para o usuário uma camada de serviço, o que significa que temos algo como:
CourseService.ResetForUser(Course courseToReset, User forUser)
Este serviço tem uma referência ao DBContext injetado na criação, mas agora nossos objetos de negócios são apenas sacos de dados sem comportamento (ou seja, um Modelo de Domínio Anêmico).
Como podemos evitar isso?