2010-11-14 4 views
0

J'ai cours pour Client, Projet et Tâche.Comment créer une propriété de classe qui est une collection d'une autre classe?

Chaque client contient plusieurs projets. Chaque projet contient plusieurs tâches.

Dans la base de données, chacun a un champ ID, et la table de projet a un champ clientid. En outre, la table Tâches a un champ projectid. Quelqu'un peut-il m'aider avec le scénario afin que je puisse faire chacun un cours?

+0

Pour quelle partie avez-vous besoin d'aide? – Oded

+0

Je peux créer la propriété de collection de base, mais comment informer la classe Client de ce que les projets lui appartiennent? –

+0

Si vous utilisez 'EF' il va créer des classes par défaut à partir de tables, et vous pouvez décider comment concevoir votre DTO et l'améliorer, les solutions fournies ci-dessous sont valides, mais peut-être votre problème n'est pas une chose que nous pensons –

Répondre

2

Ici, il est:

public class Client 
{ 
    public int Id {get;set;} 
    // Client Properties 

    private List<Project> _projects = new List<Project>(); 
    public List<Project> Projects { get { return _projects; } } 
} 

public class Project 
{ 
    public int Id { get; set; } 
    public int ClientId { get; set; } 

    // Project Properties 

    private List<Task> _tasks = new List<Task>(); 
    public List<Task> Tasks { get { return _tasks; } } 
} 

public class Task 
{ 
    public int Id { get; set; } 
    public int ProjectId { get; set; } 

    // Task Properties 
} 
+0

Comment puis-je remplir la liste privée avec les projets/tâches qui appartiennent et pas tous? –

+0

@Shane, cela dépend de ce que vous utilisez ORM. – svick

+0

@Shane - Selon le type de stockage que vous utilisez, vous devrez exposer des méthodes qui vous permettront de filtrer en fonction des propriétés. – AdamSane

0

Vous devez faire une propriété d'un type de collection, comme List<Project>. Cependant, il y a une décision à prendre: Est-ce qu'une classe externe aura un accès complet pour ajouter ou supprimer des projets directement à partir de la propriété de collection Projects, ou les classes externes ne pourront-elles lire que la collection?

Si une autre classe peut avoir un accès complet à la liste de projets, vous devez choisir le type externe auquel la liste sera exposée. Cela peut être une bonne idée d'exposer en tant que IList<Project> ou ICollection<Project> selon ce que vous voulez que les autres classes puissent faire.

Si d'autres classes ne ont libre accès à la liste, vous pouvez l'exposer comme IEnumerable<Project> afin qu'ils puissent faire tout itérer sur la liste. En outre, si aucune autre classe n'a un accès direct, vous devrez ajouter des méthodes à la classe Client pour permettre l'ajout et/ou la suppression de projets. En autorisant uniquement l'accès externe basé sur l'interface à la liste des projets, vous vous permettez de changer la structure de données sous-jacente en une autre compatible sans casser aucun autre code. Par exemple, si la propriété est IEnumerable<Project>, vous pouvez remplacer le code interne d'un List<Project> par un tableau (Project[]) et aucun autre code n'a besoin de savoir.

Questions connexes