У нашій бізнес-логіці періодично є методи, визначені приблизно так:
User.ResetCourse(Course courseToReset)
Проблема полягає в тому, що і користувач, і курс є проксі-об'єктами Entity Framework. Це означає, що коли ми потрапляємо на властивості навігації або на користувачі, або на курс, це може спричинити величезне потрапляння в базу даних, тому що ці об'єкти не є IQueyable, тому він ітерує через них нормально.
Щоб вирішити це, ми змінили підпис на:
User.ResetCourse(MyDBContext db, Course courseToReset)
Це означає, що ми можемо безпосередньо запитувати базу даних для ефективного внесення необхідних нам змін, але передача контексту Бази даних бізнес-об’єкту просто здається таким неправильним.
Пізніше ми перенесли на користувацький рівень обслуговування, що означає, що у нас є щось на кшталт:
CourseService.ResetForUser(Course courseToReset, User forUser)
У цій службі є посилання на DBContext, який вводиться під час створення, але тепер наші бізнес-об'єкти - це лише пакети даних без поведінки (тобто, анемічна модель домену).
Як ми можемо цього уникнути?