J'ai une application écrite en utilisant C# sur le dessus de ASP.NET MVC 5 et Entity Framework 6 en utilisant l'approche Database-First.Comment puis-je créer une relation Has-Many-Through avec Entity Framework 6?
J'ai un modèle Student
, un modèle ClassRoom
et un modèle relationnel pour relier les deux relations ensemble appelé StudentToClassRoom
. Je veux être en mesure de sélectionner tous les étudiants et pour chaque étudiant je veux obtenir tous les ClassRoom
que l'élève a aussi une relation.
Voici mes modèles
public class Student
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<ClassRoom> ClassRoomRelations { get; set; }
}
public class StudentToClassRoom
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[ForeignKey("Student")]
[InverseProperty("Id")]
public int StudentId { get; set; }
[ForeignKey("ClassRoom")]
[InverseProperty("Id")]
public int ClassRoomId { get; set; }
public virtual Student Student { get; set; }
public virtual ClassRoom ClassRoom { get; set; }
}
public class ClassRoom
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
}
Voici ce que j'ai essayé
var students = DbContext.Students.Include(x => x.ClassRoomRelations)
.ToList();
Cependant, cela me donne la collection de relation pour chaque élève. Mais je veux être en mesure d'obtenir l'information ClassRoom
pour chaque élève. Donc je veux créer un Has-Many-Through entre Student et ClassRoom. Dans les résultats finaux, je ne me soucie pas vraiment du ClassRoomRelations
, je me soucie seulement de l'Student
et des objets ClassRoom
.
Comment puis-je obtenir une liste de Student et une collection de toutes les classes pour chaque étudiant utilisant Entity Framework?
Ne perdez pas votre temps à chercher. EF ne supporte pas une telle relation. –
@IvanStoev merci :) Y at-il une solution de contournement pour obtenir le même jeu de données? –
Seulement si vous avez réellement besoin de 'many-to-many' avec une table de jonction implicite. Même si cela est problématique si vous êtes lié à la base de données existante ('StudentToClassRoom' n'est pas éligible pour la table de jonction automatique). –