En nuestra lógica de negocios, ocasionalmente tenemos métodos definidos como estos:
User.ResetCourse(Course courseToReset)
El problema es que tanto el usuario como el curso son objetos proxy de Entity Framework. Esto significa que cuando accedemos a las propiedades de navegación en Usuario o Curso, puede causar un gran impacto en la base de datos porque esos objetos no son IQueryable, por lo que itera a través de ellos normalmente.
Para resolver esto, cambiamos la firma a:
User.ResetCourse(MyDBContext db, Course courseToReset)
Esto significa que podemos consultar directamente la base de datos para realizar los cambios que necesitamos de manera eficiente, pero pasar el contexto de la base de datos a un objeto de negocio parece tan incorrecto.
Más tarde migramos al usuario una capa de servicio, lo que significa que tenemos algo como:
CourseService.ResetForUser(Course courseToReset, User forUser)
Este servicio tiene una referencia al DBContext inyectado en la creación, pero ahora nuestros objetos comerciales son solo bolsas de datos sin comportamiento (es decir, un modelo de dominio anémico).
¿Cómo podemos evitar esto?