Entity Framework 4.1 Recuperando dados de auto-referência
Estou usando o código do Entity Framework 4.1 primeiro e o ASP.NET MVC 3 e estou lutando para obter minha instalação de referência própria corretamente. Eu tenho uma classe de categoria. Deve ser auto-referente a si mesmo. Uma categoria pode ser uma categoria pai quando o ParentCategoryId na tabela é nulo. Se uma categoria tiver um ParentCategoryId com um valor, significa que pertence a uma categoria pai.
Eu segui issoartig no Code Project.
Aqui está minha classe de categoria:
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; }
}
Minha classe de contexto:
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);
}
}
Não tem certeza se o descrito acima está correto?
Alguém pode me ajudar a acertar isso? O que eu preciso é que, quando eu consulta uma categoria por ID, ela deve trazer de volta a categoria pai (carregada apenas quando necessário). Além disso, ele deve carregar quaisquer categorias filho (somente quando necessário). Ainda não adicionei uma lista à classe de categoria para as categorias filho.
Como seriam as perguntas acima para recuperar uma categoria com a categoria pai e as categorias filho?
EDITA
É assim que recupero minha categoria:
public Category GetById(int id)
{
return db
.Categories
.Find(id);
}
Como a referência ParentCategory pode ser nula, como eu exibi-lo na exibição? Eu tenho o seguinte:
@Model.ParentCategory.Name
.. mas isso não causará um erro se a categoria não tiver uma categoria pai associada? Como eu o exibi na exibição?