关于实体框架4中的实体,角色和接口的问题

时间:2010-05-14 09:46:34

标签: entity-framework inheritance interface roles entity-framework-4

我是一名经验丰富的.NET开发人员,但对EF来说是新手 - 所以请耐心等待。我将使用大学应用程序的示例来说明我的问题。我有这些用户角色:

讲师,学生,管理员。

在我的代码中,我设想将这些实体作为不同的类来处理,例如讲师教授一系列学生。并使用'是学生''TypeOf'等。

这些实体中的每一个都共享许多共同的属性/方法,例如他们都可以登录系统并做与其角色相关的事情。

在EF设计器中,我可以创建一个基本实体Person(或User ...),并让Lecturer,Student和Administrator都继承自该实体。

我遇到的困难是讲师可以成为管理员 - 事实上,学生有时可以成为讲师。

如果我要添加其他实体,例如Employee和Warden,那么这就会引发更多问题。

我可能会使用Interfaces,所以一个人可以实现ILecturer和IStudent,但是我不知道这是如何适合EF的。

如果可能的话,我想在EF设计师中工作,我正在模型化(用C#编码)。

所以任何帮助和建议/样品都会非常受欢迎,非常感谢。

由于

1 个答案:

答案 0 :(得分:0)

不要让StudentLecturer继承自Person。如你所说,如果“鲍勃”既是学生又是讲师呢?这种情况在实际大学里一直发生。你自己说得最好:这些是角色,而不是类型。一个人可以扮演很多角色。

根据经验,当不是绝对必要时(几乎从不),避免在O / R映射中继承。就像编码时一样,有利于组合而不是继承。

所以你可以给每个Person一个属性Roles,它是{... 1}}的0 .. *集合。然后,要获得学生列表,您可以这样做:

Role

您可以拥有var students = from p in Context.People where p.Roles.Any(r => r.Id = studentRoleId) select p; Student之间的0..1关系的相关Person类型;这将允许您为学生添加其他数据,例如:

Student