2012-01-23 4 views
1

J'essaie de créer une relation plusieurs-à-plusieurs en utilisant le code EF d'abord dans mon projet MVC. J'ai un scénario où j'ai un service qui peut avoir plusieurs catégories qui peuvent avoir plusieurs sous-catégories. Ce bit semble fonctionner correctement.Code EF ASP.NET MVC3 Premier - relations plusieurs-à-plusieurs

Chaque service, catégorie et sous-catégorie peut également être associé à plusieurs membres HelpDeskMembers. C'est là que j'ai de la difficulté à créer l'association. Avec les classes ci-dessous, je m'attendais à ce qu'EF crée des tables Service_HelpDeskMembers, Category_HelpDeskMembers et Subcategory_HelpDeskMembers. S'il vous plaît quelqu'un peut-il me guider dans la bonne direction?

P.S. Dans les propriétés de navigation, je n'utilise pas de virtual car j'utilise AJAX et JSON pour créer des listes déroulantes en cascade entre Service/Category/Subcategory et en utilisant 'virtual', j'obtenais une erreur de référence circulaire.

Voici mes cours.

public class Service 
{ 
    [Key] 
    public int ServiceID { get; set; } 

    public string Title { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public HelpDeskMember CreatedBy { get; set; } 
    public DateTime? DeletedDate { get; set; } 
    public HelpDeskMember DeletedBy { get; set; } 

    public ICollection<Category> Categories { get; set; } 
    public ICollection<HelpDeskMember> LinesOfSupport { get; set; } 
} 

public class Category 
{ 
    [Key] 
    public int CategoryID { get; set; } 
    [ForeignKey("Service")] 
    public int ServiceID { get; set; } 

    public string Title { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public HelpDeskMember CreatedBy { get; set; } 
    public DateTime? DeletedDate { get; set; } 
    public HelpDeskMember DeletedBy { get; set; } 

    public Service Service { get; set; } 
    public ICollection<Subcategory> Subcategories { get; set; } 
    public ICollection<HelpDeskMember> LinesOfSupport { get; set; } 
} 

public class Subcategory 
{ 
    [Key] 
    public int SubcategoryID { get; set; } 
    [ForeignKey("Category")] 
    public int CategoryID { get; set; } 

    public string Title { get; set; } 
    public DateTime CreatedDate { get; set; } 
    public HelpDeskMember CreatedBy { get; set; } 
    public DateTime? DeletedDate { get; set; } 
    public HelpDeskMember DeletedBy { get; set; } 

    public Category Category { get; set; } 
    public ICollection<HelpDeskMember> LinesOfSupport { get; set; }  
} 

public class HelpDeskMember 
{ 
    public int HelpDeskMemberID { get; set; } 
    public string Name { get; set; } 
    public bool Admin { get; set; } 
    public bool Available { get; set; } 
    public DateTime? CreatedDate { get; set; } 
    public DateTime? LastLogin { get; set; } 
    public DateTime? DeletedDate { get; set; } 
    public DateTime? DeletedBy { get; set; } 

    public ICollection<Service> Services { get; set; } 
    public ICollection<Category> Categories { get; set; } 
    public ICollection<Subcategory> Subcategories { get; set; } 
} 

Merci d'avance.

Répondre

3

L'astuce est d'utiliser le constructeur de modèle pour créer le nombre à plusieurs liens, alors il fonctionnera comme prévu dans la db (avec une table de lien)

Jetez un oeil à cet article pour plus de détails sur comment en faire beaucoup à plusieurs http://blogs.microsoft.co.il/blogs/gilf/archive/2011/08/01/creating-a-many-to-many-mapping-using-code-first.aspx

+0

Merci! La base de données a été créée exactement comme je le veux. Je ne peux pas croire que cela a fonctionné la première fois! :-) –

+0

EF CodeFirst est génial :) jetez un coup d'oeil aux nouveaux trucs Migrations qui sont actuellement en BETA qui est aussi vraiment cool –

Questions connexes