2012-02-08 5 views
4

Je crée une application de calendrier. J'ai une table de rendez-vous, et une table de personne. Les 2 sont liés par un champ PersonID dans chaque table. Ma question est, si mon objet sous-jacent .Net Appointment contient une propriété pour PersonName, et je peuple l'objet d'une vue de base de données (ou procédure stockée qui joint les tables) ou est-il plus correct d'avoir la classe Appointment contenir une classe People? Si la réponse est la dernière, quel est le meilleur moyen de peupler l'objet Rendez-vous/Personne de la base de données?Modéliser une clé étrangère de base de données dans C#

Répondre

0

Supposons que vous n'êtes pas en utilisant un ORM, vous pouvez jeter un oeil à la configuration DAO: http://en.wikipedia.org/wiki/Data_access_object

je créerais deux DTO:

class Person 
{ 
    public int id { get; set; } 
    public String name { get; set; } 
} 

class Appointment 
{ 
    public int id { get; set; } 
    public Date when { get; set; } 
    public Person who { get; set; } 
} 

Et une classe de rendez-vous « complet »:

class FullAppointment 
{ 
    private Person person; 
    private List<Appointment> appointment; 
} 

Ensuite, un DTO pour obtenir des données de la DB:

class AppointmentDTO 
{ 
    public FullAppointment retrieveFromDb(int personId) 
    {//...} 
} 
1

Je ne suis pas sûr de lire la base de données. Mais les classes pourraient ressembler à:

public class Person 
{ 
    public List<Appointment> Appointments { get; private set; } 
    ... 

    public Person() 
    { 
     Appointments = new List<Appointment>(); 
    } 
} 

public class Appointment 
{ 
    public Person Person { get; set; } // Only if you need this relation from 
    ... 
} 

Et dans votre modèle:

Persons = new List<Person>(); 
1

Vous ne devriez pas dupliquer les propriétés. Une fois enetity/class devrait avoir seulement des propriétés qui sont valides pour cette entité.

Si vous voulez appeler une autre table, vous devriez avoir une propriété qui retournerait une autre entité par une clé étrangère spécifique.

Dans votre cas, j'aurais

public class Person 
{ 
    List<Appointment> _appointments; 
    public List<Appointment> Appointments 
    { 
     get 
     { 
      if (_appointments == null) _appointments = //LOAD APPOINTMENTS FOR THAT PERSON 
      return _appointments; 
     } 
    } 
} 

espoir qui aide.

Questions connexes