Я сначала использую код 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
.. но не выдаст ли он ошибку, если с категорией не связана родительская категория? Как мне отобразить его в представлении?