6

J'utilise d'abord le code Entity Framework 4.1 et ASP.NET MVC 3 et j'ai du mal à obtenir correctement ma configuration d'auto-référencement. J'ai un cours de catégorie. Il doit être auto-référencé à lui-même. Une catégorie peut être une catégorie parente lorsque l'attribut ParentCategoryId de la table est null. Si une catégorie a une valeur ParentCategoryId avec une valeur, cela signifie qu'elle appartient à une catégorie parente.Entity Framework 4.1 Récupération des données d'auto-référence

J'ai suivi ce article sur le projet de code.

Voici ma classe Catégorie:

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    public bool IsActive { get; set; } 
    public virtual Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
} 

Ma classe de contexte:

public class PbeContext : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
    { 
      dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

      dbModelBuilder.Entity<Category>() 
       .HasOptional(c => c.ParentCategory) 
       .WithMany() 
       .HasForeignKey(p => p.ParentCategoryId); 
    } 
} 

Je ne sais pas si ce qui précède est correct?

Quelqu'un peut-il m'aider s'il vous plaît à obtenir ce droit? Ce dont j'ai besoin, c'est que lorsque j'interroge une catégorie par identifiant, il doit ramener la catégorie parente (seulement chargée si nécessaire). En outre, il doit charger toutes les catégories enfant (seulement si nécessaire). Je n'ai pas encore ajouté de liste à la classe de catégorie pour les catégories enfant. A quoi ressembleraient les quesries ci-dessus pour récupérer une catégorie avec sa catégorie parente et ses catégories enfants?

EDIT

Voici comment je récupère ma catégorie:

public Category GetById(int id) 
{ 
    return db 
      .Categories 
      .Find(id); 
} 

Parce que la référence ParentCategory peut être nul, comment pourrais-je afficher dans la vue? Je donne les résultats suivants:

@Model.ParentCategory.Name 

..mais sera pas une erreur si la catégorie n'a pas de catégorie parent associé? Comment l'afficher dans la vue?

Répondre

7

Si vous avez besoin d'accéder à des catégories d'enfants, vous pouvez ajouter une propriété de collection à votre modèle

public class Category 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    public bool IsActive { get; set; } 
    public virtual Category ParentCategory { get; set; } 
    public int? ParentCategoryId { get; set; } 
    public virtual ICollection<Category> ChildCategories{ get; set; } 
} 

Ensuite, vous pouvez configurer le modèle comme

 dbModelBuilder.Entity<Category>() 
      .HasOptional(c => c.ParentCategory) 
      .WithMany(c => ChildCategories) 
      .HasForeignKey(p => p.ParentCategoryId); 

Modifier

Vous devriez vérifier si ParentCategory est null ou non.

@if(Model.ParentCategory != null){ 
    <div>@Model.ParentCategory.Name</div> 
} 
+0

Merci. À quoi ressemblerait votre requête pour récupérer les données? –

+0

S'il vous plaît voir mon post édité :) –

+0

@Brendan modifié la réponse – Eranga

Questions connexes