2010-11-04 5 views
-1

J'ai besoin des conseils des gens pour savoir si c'est la meilleure façon de réaliser ce que je veux. Excuses d'avance si c'est un peu subjectif.Besoin de conseils sur la structure de ma base de données, pour créer des entités utiles

Je veux utiliser Entity Framework V.1 pour créer quelque chose de similaire aux classes C# suivantes:

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

class Teacher : User 
{ 
    public string FavorateNewspaper; 
} 

class Pupil : User 
{ 
    public string FavorateCartoon; 
} 

J'ai besoin de conseils des gens sur la façon de mieux persister ces informations.

Je prévois d'utiliser SQL Server et le fournisseur d'appartenances normal. Cela créera pour moi une table appelée aspnet_Users. Il y aura deux rôles: enseignant et élève.

Je vais ajouter des champs à la table aspnet_Users qui sont communs aux deux rôles. Créez ensuite tbl_Teachers et tbl_Pupils pour stocker des informations spécifiques à un rôle.

donc Ma base de données sera un peu comme ceci:

aspnet_Users 
    int UserId 
    varchar TelephoneNumber 

tbl_Teachers 
    int UserId 
    varchar FavorateNewspaper 

tbl_Pupils 
    int UserId 
    varchar FavorateCartoon 

L'idée étant bien sûr que je peux faire correspondre les données aspnet_Users que soit dans tbl_Teachers ou tbl_Pupils en se joignant à UserId.

Donc, pour résumer, mes questions sont les suivantes:

Est-ce ma structure de base de données la meilleure option pour atteindre ces classes?

Dois-je essayer d'emballer les entités dans mes propres classes POCO? Dois-je modifier ma structure de base de données pour que EF crée des entités plus proches des classes que je veux?

EDIT: J'ai réarrangé ma question, cela rend un peu plus clair ce que je demande.

Répondre

1

Si vous utilisez EF 1, alors POCO peut être un peu désagréable. À moins d'avoir une bonne raison de ne pas le faire, j'utiliserais simplement des entités EF normales. En passant, votre modèle de base de données est correct et constitue un exemple de mappage d'héritage TPT (Table Per Type). Vous pouvez soit utiliser l'assistant pour créer des entites à partir des données, soit créer vos entités et les mapper aux tables associées. Si vous faites le premier, vous finirez avec trois entités non apparentées. Vous utiliserez ensuite le concepteur pour dire à EF que l'élève et l'enseignant héritent de l'utilisateur, et que l'utilisateur est abstrait.

En général, l'une des forces de EF est que les entités ne doivent pas correspondre si étroitement aux tables qui les persistent. Dans ce cas, cependant, il existe une cartographie naturelle.

+0

Intéressant. Je ne savais pas qu'il était possible d'ajouter de l'héritage via le concepteur. Je vais essayer maintenant. –

+0

Yup, simple comme sélection de l'outil d'héritage et glisser de l'enfant au parent. Je me suis trompé en pensant qu'il y avait peut-être une complication dans EF1, même si cela n'a été que dans des cas particuliers. Commentez ici si vous avez des problèmes et je vais creuser mes notes. –

+0

Il y avait un problème mineur. La classe de base User avait deux propriétés, appelées Teacher et Pupil. Ceux-ci ont probablement un sens normalement, mais une fois que vous mettez l'héritage là-bas, vous pouvez faire des choses comme oTeacher.Pupil qui est mauvais en tant que professeur ne peut pas être un élève. Ou oUser.Pupil qui retournerait la même personne? Je viens de rendre ces propriétés privées et les ai oubliées. Savez-vous comment les supprimer vraiment? –

Questions connexes