我需要人们的建议,这是否是实现我想要的最佳方式。如果这有点主观,请提前道歉。
我想使用Entity Framework V.1创建类似于以下C#类的东西:
abstract class User
{
public int UserId;
public string TelephoneNumber;
}
class Teacher : User
{
public string FavorateNewspaper;
}
class Pupil : User
{
public string FavorateCartoon;
}
我需要人们就如何最好地保留这些信息提出建议。
我计划使用SQL Server和普通的成员资格提供程序。它将为我创建一个名为aspnet_Users的表。将有两个角色:老师和学生。
我将向aspnet_Users表中添加两个角色共有的字段。然后创建tbl_Teachers和tbl_Pupils以保存特定于一个角色的信息。
所以我的数据库看起来有点像这样:
aspnet_Users
int UserId
varchar TelephoneNumber
tbl_Teachers
int UserId
varchar FavorateNewspaper
tbl_Pupils
int UserId
varchar FavorateCartoon
当然,我想通过加入UserId将aspnet_Users中的数据与tbl_Teachers或tbl_Pupils中的数据相匹配。
总而言之,我的问题是:
我的数据库结构是实现这些类的最佳选择吗?
我应该尝试将实体包装在我自己的POCO类中吗?
我应该更改我的数据库结构,以便EF创建更接近我想要的类的实体吗?
编辑:我重新安排了我的问题,让我的问题更加清晰。
答案 0 :(得分:1)
如果您使用EF 1,那么POCO可能会有点不愉快。除非有充分的理由不这样做,否则我只会使用普通的EF实体。顺便说一下,你的数据库模型很好,并且是TPT(Table Per Type)继承映射的一个例子。您可以使用向导从数据库创建entites,也可以创建您的entites并将它们映射到关联的表。如果你做前者,你最初会得到三个不相关的实体。然后,您可以使用设计器告诉EF Pupil和Teacher继承自User,并且User是抽象的。
通常,EF的优势之一是实体不必与那些持久存在的表紧密匹配。在这种情况下,虽然有一个自然的映射。