ビジネスロジックでは、次のようなメソッドが定義されている場合があります。
User.ResetCourse(Course courseToReset)
問題は、ユーザーとコースの両方がEntity Frameworkプロキシオブジェクトであるということです。つまり、ユーザーまたはコースのいずれかのナビゲーションプロパティにヒットすると、それらのオブジェクトはIQuery可能ではないため、通常どおりに繰り返されるため、データベースに大きなヒットを引き起こす可能性があります。
これを解決するために、署名を次のように変更しました。
User.ResetCourse(MyDBContext db, Course courseToReset)
つまり、データベースに直接クエリを実行して必要な変更を効率的に行うことができますが、データベースコンテキストをビジネスオブジェクトに渡すことは非常に間違っているようです。
その後、ユーザーにサービスレイヤーを移行しました。つまり、次のようなものがあります。
CourseService.ResetForUser(Course courseToReset, User forUser)
このサービスには、作成時に挿入されたDBContextへの参照がありますが、現在のビジネスオブジェクトは、動作のない単なるデータバッグです(つまり、Anemic Domain Model)。
どうすればこれを回避できますか?