Entity Framework 4.1 Получение данных со ссылками на себя

Я сначала использую код Entity Framework 4.1 и ASP.NET MVC 3, и мне трудно правильно настроить саморегулирующуюся установку. У меня есть класс категории. Он должен ссылаться на самого себя. Категория может быть родительской, если ParentCategoryId в таблице имеет значение NULL. Если у категории есть ParentCategoryId со значением, это означает, что она принадлежит к родительской категории.

Я следил за этой статьей в Code Project.

Вот мой класс Category:

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

My context class:

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

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

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

Не уверен, что приведенное выше верно?

Кто-нибудь может помочь мне понять это правильно? Что мне нужно, так это то, что когда я запрашиваю категорию по идентификатору, она должна возвращать родительскую категорию (загружается только при необходимости). Также он должен загружать любые дочерние категории (только при необходимости). Я еще не добавил список в класс категории для дочерних категорий.

Как будут выглядеть приведенные выше запросы, чтобы получить категорию с родительской категорией и дочерними категориями?

ИЗМЕНИТЬ

Вот как я получаю моя категория:

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

Поскольку ссылка ParentCategory может иметь значение null, как мне отобразить это в представлении? У меня есть следующее:

@Model.ParentCategory.Name

.. но не выдаст ли он ошибку, если с категорией не связана родительская категория? Как мне отобразить его в представлении?

6
задан Brendan Vogt 14 July 2011 в 09:43
поделиться