J'ai un SampleDB qui contient 3 tables.Comment utiliser Entity Framework pour travailler avec des relations plusieurs-à-plusieurs?
Table Employees (EmployeeID, EmployeeName)
Table Projects (ProjectID, ProjectName)
Table ProjectResources (ProjectID, EmployeeID)
La table ProjectResources est une table de références croisées qui crée une relation plusieurs-à-plusieurs entre les employés et les projets.
Je voudrais utiliser LINQ pour sélectionner tous les employés qui n'ont pas encore été affectés à un projet particulier. Voici les étapes de mon travail:
Création d'un modèle de données d'entité de l'SampleDB ci-dessus à l'aide de l'assistant Entity Framework. L'assistant crée deux entités: Employés et Projets, que j'ai renommés être Employé et Projet. L'entité de projet a une propriété de navigation Employees qui référence une collection d'employés et l'entité Employee une propriété de navigation Projects qui référence une collection de projets. Il semble donc que EF a correctement identifié ma relation many-to-many entre les employés et les projets.
Maintenant, voici le code que j'ai utilisé pour essayer de sélectionner tous les employés qui n'ont pas encore été affectés à un projet.
SampleDBEntities db = new SampleDBEntities(); var project = db.Projects.Include("Employees") .FirstOrDefault(p => p.ProjectID == 1); var currentEmployees = project.Employees; var employeesNotAssignedToProject = db.Employees.Except(currentEmployees);
charges de projet var très bien avec le projet qui a ProjectID de 1 var currentEmployees charges fines avec une liste d'employés actuellement affectés à ce projet
Puis-je obtenir l'exception suivante lorsque je tente pour regarder le ofemployeesNotAssignedToProject de resultsview dans la fenêtre de la montre:
{ "Impossible de créer une valeur constante de type « System.Collections.Generic.IEnumerable`1 ». Seuls les types primitifs ('tels que Int32, String et Guid') sont pris en charge dans ce contexte "}
questions sont donc:.?
- Pourquoi ai-je cette exception
- ? y at-il une autre façon (qui fonctionne) d'essayer d'accomplir ce type de tâche Remarquez que je suis en train d'utiliser le « Sauf » méthode peut-être il y a une meilleure façon
Désolé pour le formatage de ma question. Je suis nouveau à SO. J'essaierai de formater d'autres questions de manière plus appropriée. – jsteele
J'espère que c'est mieux. :) –
Nice! Merci d'avoir aidé Craig. – jsteele