并提前感谢您的时间。
我们使用的是 CSLA 3.5.1,尽管最终这个问题可能与 CSLA 没有太大关系。
我的公司在常见建模错误的道路上走了很长一段路,最终不得不面对它。我已经简化了下面的域对象以澄清问题:
我们有 3 个这样定义的类:
类人:BusinessBase
班级学生:人
班主任:人
我们在 ORM 中使用 NHibernate,Student 和 Teacher 类在我们的映射中是 Person 的子类(我们有 Person、Student 和 Teacher 表),使用 PersonID 作为派生键。
正如您可能已经预料到的那样,问题是现在我们有一个学生也可以成为老师的情况。在当前的对象和数据模型下,当我们尝试添加一个已经是教师的学生时,这会导致主键冲突,反之亦然。
问题一:在保存新记录之前,我可以在业务对象上执行任何 CSLA 魔术来防止这种情况吗?
如果不...
在研究这个问题时,我看到了两个解决它的建议,第一个是支持组合而不是继承。据我了解,这意味着 Student 和 Teacher 将各自包含一个 Person 属性。
问题二:为了让它工作,假设学生表和教师表需要一个外键进入 Person 表是否正确?我想我对这个解决方案没有完整的了解,并希望得到一些指导。
第二种解决方案涉及将学生和教师视为特定人所扮演的角色。从我所见,Person 类需要一个 Roles 集合,并且链接表(PersonRoles?)用于将 Student 和 Teacher 表中的记录映射到 Person。
问题三:Role 基类和 PersonRoles 表是什么样的?我相信 Student 和 Teacher 子类只会包含它们适当的属性。它是否正确?
对解决方案有任何意见吗?如果有人能在网上找到一个充实的例子,我很乐意看到它。
谢谢,
将要。