W naszej logice biznesowej czasami mamy zdefiniowane metody, takie jak to:
User.ResetCourse(Course courseToReset)
Problem polega na tym, że zarówno Użytkownik, jak i Kurs są obiektami proxy Entity Framework. Oznacza to, że kiedy trafimy na właściwości nawigacji użytkownika lub kursu, może to spowodować ogromne trafienie w bazie danych, ponieważ obiektów tych nie można poddać IQueryable, więc przechodzi przez nie normalnie.
Aby rozwiązać ten problem, zmieniliśmy podpis na:
User.ResetCourse(MyDBContext db, Course courseToReset)
Oznacza to, że możemy bezpośrednio zapytać bazę danych, aby wprowadzić potrzebne zmiany w efektywny sposób, ale przekazanie kontekstu bazy danych do obiektu biznesowego wydaje się tak błędne.
Później przenieśliśmy do użytkownika warstwę usługi, co oznacza, że mamy coś takiego:
CourseService.ResetForUser(Course courseToReset, User forUser)
Ta usługa zawiera odniesienie do DBContext wprowadzonego podczas tworzenia, ale teraz nasze obiekty biznesowe są tylko workami danych bez zachowania (tj. Model domeny anemicznej).
Jak możemy tego uniknąć?