Ich habe zwei Entitäten Benutzer und Kurs. Ein Benutzer kann mehrere Kurse belegen, wodurch die Beziehung eins zu vielen entsteht. Aber ein einzelner Kurs kann von vielen Studenten belegt werden, so dass die Beziehung viele zu viele ist.
Jetzt muss ich einen Kurs für einen Benutzer registrieren. Meine Benutzerentität hat:
public void AddCourse(Course course)
{
if (CoursesAlreadyAdded(course))
{
AddBrokenRule(new BrokenRule() { PropertyName = course.ClassCode, Message = String.Format("Course with classCode = {0} already added", course.ClassCode) });
return;
}
UserCourses.Add(new UserCourse() { UserId = this.UserId, CourseId = course.CourseId, Course= course, User = this});
}
Die Klassen werden durch Linq to SQL generiert. Linq to Sql ist nicht in der Lage, viele bis viele Beziehungen zu erstellen, so dass ich dies selbst tun muss.
Die Frage ist nun, wie ich die Informationen an die Datenbank übermitteln kann. Sollte UserRepository.Save(user) für die Speicherung der Kurse verantwortlich sein.
Dies bedeutet, dass der Benutzer die aggregierte Wurzel der Kursentität ist, aber in Wirklichkeit ist das nicht der Fall, da ich auf viele verschiedene Arten auf den Kurs zugreifen kann und ich nicht vom Benutzerobjekt abhängig bin, um mir den Kurs zu liefern.
Selbst wenn ich einen CourseRegistrationService habe (was ich habe), muss ich ein Repository aufrufen, um die Änderungen beizubehalten. Welches Repository ist für die Persistierung der Änderungen an der Beziehung zwischen Benutzer und Kurs verantwortlich? Vielleicht ein UserCourseRepository!
Außerdem wird User durch das Anlegen einer Liste unter dem User-Objekt zu einem aggregierten Root, oder ist das falsch? Wenn ja, wie würden Sie dann eine Anwendung mit OR MAPPERS entwerfen, die automatisch eine Liste und eine bis viele Beziehungen erzeugt.