Сначала я использую код Entity Framework 4.1 и ASP.NET MVC 3, и я изо всех сил пытаюсь правильно настроить самоссылку.У меня есть категория Категория.Это должно быть самореференция к себе.Категория может быть родительской категорией, когда ParentCategoryId в таблице равен нулю.Если у категории есть ParentCategoryId со значением, то это означает, что она принадлежит родительской категории.
Я следовал этой статье в Code Project.
Вот моя категориякласс:
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 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);
}
}
Не уверен, что вышеприведенное верно?
Может кто-нибудь помочь мне понять это правильно?Что мне нужно, так это то, что когда я запрашиваю категорию по идентификатору, она должна возвращать родительскую категорию (загружается только при необходимости).Также он должен загружать любые дочерние категории (только при необходимости).Я еще не добавил список в класс категорий для дочерних категорий.
Как бы выглядел вышеупомянутый вопрос для извлечения категории с его родительской категорией и дочерними категориями?
РЕДАКТИРОВАТЬ
Вот так я получаю свою категорию:
public Category GetById(int id)
{
return db
.Categories
.Find(id);
}
Поскольку ссылка ParentCategory может быть нулевой, как мне отобразить это в представлении?У меня есть следующее:
@Model.ParentCategory.Name
.. но не выдаст ли это ошибку, если у категории нет родительской категории, связанной с ней?Как бы я отобразил это в виде?