2010-11-16 5 views
3

Ok, je n'ai pas beaucoup de chance avec cela. Je suis nouveau à Entity Framework, et je me bats avec cette petite chose depuis hier.Juste ne peut pas obtenir Entity Framework pour tirer ce que je veux

Voici mes tableaux:

  1. clients (id, nom_de_client)
  2. Projets (id, projectname, clientid)
  3. Tâches (id, nom_tâche, projectId, StatusID)
  4. TaskStatuses (id, statusname)

Dans le code je ne travaille qu'avec un projet à la fois, et voici comment je charge ce projet avec EF:

thisProject = (from p in dataEntity.projects 
        where p.id == projectID 
        select p).FirstOrDefault(); 

Puis plus tard, quand je charge les tâches:

thisProject.Tasks.Load(); 

Ensuite, je mets la source de données d'un XtraGrid DevExpress aux tâches chargées:

taskGridControl.DataSource = thisProject.Tasks; 

Jusqu'à ce point, tout fonctionne comme attendu, et la grille montre toutes les tâches pour le projet que j'ai chargé. Mais, je veux également montrer le champ de nom de statut de tâche, et qui est stocké dans une table différente.

Cela a été très facile avec une jointure SQL, mais pour la vie de moi, je ne peux pas comprendre cela.

Répondre

3

Il est plus facile de sélectionner vos données sur dans une classe qui est fait sur mesure pour ce point de vue de la grille:

from t in dataEntity.tasks 
where t.projectId == projectID 
select new TaskInfo 
{ 
    ProjectName = t.project.projectname, 
    TaskName = t.taskname, 
    StatusName = t.taststatus.statusname 
} 
+0

Cela a fait l'affaire. J'ai créé la classe et l'ai sélectionnée dans une instance IList. Puis utilisé la liste résultante pour bing la grille. Merci! –

0
  1. Assurez-vous que l'autre table est chargée. En supposant que l'autre table est appelée TaskStatus,

    thisProject.Tasks.TasksStatusReference.Load(); 
    
  2. Dans le concepteur, sous DataBindings, référence tout comme vous le feriez pour tout autre domaine, avec le qualificatif TaskStatus. avant qu'il: TaskStatus.Status.

1

Cela ne ressemble pas à la table d'état de votre tâche.

Je pense que vous pouvez avoir plus de chance avec EF version 4 - alors vous n'auriez pas besoin de la ligne 'thisProject.Tasks.Load()', et la table d'état des tâches serait aussi chargée paresseusement pour vous automatiquement.

+0

Comment savoir si je suis sur EF version 4? Je développe en VS 2010 et le projet est. Net 4.0. –

+0

Ok, en quelque sorte tous les autres projets dans la solution où 4.0, celui-ci était de 3,5. Je l'ai mis à jour, et je verrai ce qui se passe, merci! –

+0

Wow, je ne sais pas si c'est mon imagination, mais une fois que j'ai changé le projet de données à 4.0, il semble beaucoup plus rapide. –

0

Encore quelques idées à ajouter à celles déjà suggérées.

Ce premier peut ne pas s'appliquer mais dans le cas où il le fait ... :) Si, au moment où vous chargez le projet, vous savez déjà que vous voulez les tâches et le statut, vous pouvez charger les données connexes avec le projet .

ThisProject = (à partir de p dans dataEntity.projects.Include ("Tasks.TasksStatuses") où p.id == ProjectID select p).FirstOrDefault();

(je devine les noms de vos propriétés de navigation.)

Une autre possibilité d'envisager ... vous utilisez asp.net? Vous pouvez ne plus avoir accès au contexte lorsque vous tentez de charger paresseux les données d'état.

+0

Merci Julie, mais j'utilise WinForms, et j'ai pensé à charger les données avec impatience, mais j'ai un tas de types de données possibles qui ont tous la même structure de base qui devra être chargée en cas de besoin. –

Questions connexes