开发者

Need advice on structure of my database, to create useful Entities

I need people's advice as to whether this the best way to achieve what I want. Apologies in advance if this is a little to subjective.

I want to use Entity Framework V.1 to create something similar to the following C# classes:

abstract class User 
{ 
   public int UserId;
   public string TelephoneNumber;
}

class Teacher : User 
{ 
   public string FavorateNewspaper; 
}

class Pupil : User 
{ 
   public string FavorateCartoon; 
}

I need people's advice as to how to best to persist this information.

I plan to use 开发者_如何学编程SQL Server and the normal Membership Provider. It will create for me a table called aspnet_Users. There will be two roles: Teacher and Pupil.

I will add fields to the table aspnet_Users which are common to both roles. Then create tbl_Teachers and tbl_Pupils to hold information specific to one role.

So My database will look a bit like this:

aspnet_Users
    int UserId
    varchar TelephoneNumber

tbl_Teachers
    int UserId
    varchar FavorateNewspaper

tbl_Pupils
    int UserId
    varchar FavorateCartoon

The idea of course being that I can match up the data in aspnet_Users to that in either tbl_Teachers or tbl_Pupils by joining on UserId.

So to summarise, my questions are:

Is my database structure the best option to achieve these classes?

Should I try to wrap the Entities within my own POCO classes?

Should I change my database structure so that EF creates entities which are closer to the classes I want?

EDIT: I re-arranged my question it make it a bit clearer what I'm asking.


If you're using EF 1, then POCO can be a bit unpleasant. Unless there's a good reason not to, I'd just use normal EF entities. Your database model is fine, by the way, and is an example of TPT (Table Per Type) inheritance mapping. You could either use the wizard to create entites from the databaes, or create your entites and map them to the associated tables. If you do the former you'd initially end up with three unrelated entities. You'd then use the designer to tell EF that Pupil and Teacher inherit from User, and that User is abstract.

In general, one of the strengths of EF is that the entities don't have to match that closely to the tables that persist them. In this case though there's a natural mapping.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜