Модель самоссылки в ASP.NET MVC 3 с использованием Entity Framework - PullRequest
0 голосов
/ 27 января 2012

У меня есть класс категории, и он может ссылаться на себя (только на один уровень выше) как родительская категория.

Когда я получаю данные, используя dbContext, используя Entity Framework, родительские отношения не загружаются. Как мне добиться этого? Вот класс

public class Category
{
    [Key]
    public int CategoryID { get; set; }       
    [Display(Name="Category Name")]
    public string CategoryName { get; set; }

    public int ParentCategoryID { get; set; }
    public virtual Category ParentCategory { get; set; }

}

когда я получаю всю категорию, используя dbcontext, ParentCategory имеет значение null, поскольку он не присоединяется к другому классу категории с таким же идентификатором.

Может кто-нибудь сказать мне, как я могу изменить метод db.Category.ToList (), чтобы он также присоединялся к родительскому дочернему отношению одновременно? Спасибо

Ответы [ 2 ]

1 голос
/ 06 марта 2014

Попробуйте вот так

public class Category
{
    [Key]
    public int CategoryID { get; set; }       

    [Display(Name="Category Name")]
    public string CategoryName { get; set; }

    public int? ParentCategoryID { get; set; }
    public virtual Category ParentCategory { get; set; }

}

А в вашем классе Context,

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Category>().
      HasOptional(e => e.ParentCategory).
      WithMany().
      HasForeignKey(m => m.ParentCategoryID);
  }
0 голосов
/ 27 января 2012

ParentCategoryID должен быть обнуляемым, поскольку корневая категория не будет иметь родителя, а EF должен присвоить ему значение null.

public class Category
{
    [Key]
    public int CategoryID { get; set; }       
    [Display(Name="Category Name")]
    public string CategoryName { get; set; }

    public int? ParentCategoryID { get; set; }
    public virtual Category ParentCategory { get; set; }

}
...