6

Korzystam najpierw z Entity Framework 4.1 i ASP.NET MVC 3 i staram się poprawnie ustawić mój własny odnośnik. Mam klasę kategorii. Musi się odnosić do siebie. Kategoria może być kategorią nadrzędną, gdy parametr ParentCategoryId w tabeli ma wartość null. Jeśli kategoria ma ParentCategoryId z wartością, oznacza to, że należy ona do kategorii nadrzędnej.Entity Framework 4.1 Pobieranie danych samoreferencyjnych

Poszedłem za tym article w Code Project.

Oto moja klasa Kategoria:

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; } 
} 

Moja klasa kontekst:

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); 
    } 
} 

Nie wiem, czy powyższe jest prawidłowe?

Czy ktoś może mi pomóc to naprawić? To, czego potrzebuję, to to, że kiedy wyszukuję kategorię według id, to musi ona przywrócić kategorię nadrzędną (ładowaną tylko w razie potrzeby). Ponadto musi załadować dowolne kategorie dzieci (tylko wtedy, gdy jest to potrzebne). Nie dodałem jeszcze listy do kategorii kategorii dla kategorii dzieci.

Jakie są powyższe pytania, aby pobrać kategorię z kategorią nadrzędną i kategoriami podrzędnymi?

EDIT

ten sposób odzyskać moją kategorię:

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

Ponieważ ParentCategory odniesienia może być null, jak bym to wyświetlenie w widoku? Mam następujące:

@Model.ParentCategory.Name 

.. ale czy nie spowoduje błędu, jeśli kategoria nie ma powiązanej z nią kategorii macierzystej? Jak wyświetlić to w widoku?

Odpowiedz

7

Jeżeli chcesz mieć dostęp do podkategorii można dodać obiekt zbiórki do modelu

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; } 
} 

Następnie można skonfigurować model jako

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

Edit

powinieneś sprawdź, czy ParentCategory ma wartość null, czy nie.

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

Dzięki. Jak wyglądałoby twoje zapytanie w celu pobrania danych? –

+0

Zobacz mój zredagowany wpis :) –

+0

@Brendan edytował odpowiedź – Eranga

Powiązane problemy