【发布时间】:2010-01-26 20:50:44
【问题描述】:
我有两个实体用户和课程。一个用户可以参加几门课程,这使得关系成为一对多。但是许多学生可以参加一门课程,因此它是多对多的关系。
现在,我需要为用户注册一门课程。我的用户实体有:
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});
}
这些类是通过 Linq to SQL 生成的。 Linq to sql 无法执行多对多关系,所以我必须自己处理。
现在,问题是我将如何将信息发送到数据库。 UserRepository.Save(user) 是否应该负责保存课程。
这意味着 User 是 Course 实体的聚合根,但实际上并非如此,因为我可以通过多种不同的方式访问 Course,而且我不依赖 User 对象来为我提供 Course。
即使我有 CourseRegistrationService(我有),我也必须调用存储库来保存更改。哪个存储库负责持久化有关用户和课程关系的更改。也许是 UserCourseRepository!
此外,仅通过在 User 对象下放置一个 List 就可以使 User 成为聚合根,或者这是不正确的。如果是这样,那么您将如何使用 OR MAPPERS 设计应用程序,它会自动生成列表和一对多关系。
【问题讨论】:
-
听起来数据模型已经设置好了,但在我看来,通过将连接表具体化为注册模型来避免多对多关系,您可以省去一些麻烦。
-
@Thom,不知道你的意思!能详细点吗!
-
基本上是接受的答案所说的。