비즈니스 로직에서 때때로 다음과 같이 정의 된 메소드가 있습니다.
User.ResetCourse(Course courseToReset)
문제는 User와 Course가 모두 Entity Framework 프록시 개체라는 것입니다. 즉, User 또는 Course에서 탐색 속성에 도달하면 데이터베이스에 큰 타격을 줄 수 있으며 이러한 개체는 IQueryable이 아니므로 정상적으로 반복됩니다.
이를 해결하기 위해 서명을 다음과 같이 변경했습니다.
User.ResetCourse(MyDBContext db, Course courseToReset)
즉, 데이터베이스를 직접 쿼리하여 효율적으로 필요한 변경을 수행 할 수 있지만 데이터베이스 컨텍스트를 비즈니스 오브젝트에 전달하는 것은 매우 잘못된 것 같습니다.
나중에 서비스 계층을 사용자에게 마이그레이션하여 다음과 같은 것을 의미합니다.
CourseService.ResetForUser(Course courseToReset, User forUser)
이 서비스는 작성시 삽입 된 DBContext에 대한 참조를 갖지만 이제 비즈니스 오브젝트는 동작이없는 데이터 백입니다 (예 : 빈혈 도메인 모델).
우리는 이것을 어떻게 피할 수 있습니까?