需要有关我的数据库结构的建议,以创建有用的实体

时间:2010-11-04 10:52:48

标签: sql-server entity-framework data-structures

我需要人们的建议,这是否是实现我想要的最佳方式。如果这有点主观,请提前道歉。

我想使用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创建更接近我想要的类的实体吗?

编辑:我重新安排了我的问题,让我的问题更加清晰。

1 个答案:

答案 0 :(得分:1)

如果您使用EF 1,那么POCO可能会有点不愉快。除非有充分的理由不这样做,否则我只会使用普通的EF实体。顺便说一下,你的数据库模型很好,并且是TPT(Table Per Type)继承映射的一个例子。您可以使用向导从数据库创建entites,也可以创建您的entites并将它们映射到关联的表。如果你做前者,你最初会得到三个不相关的实体。然后,您可以使用设计器告诉EF Pupil和Teacher继承自User,并且User是抽象的。

通常,EF的优势之一是实体不必与那些持久存在的表紧密匹配。在这种情况下,虽然有一个自然的映射。