Asp.net mvc 3 具有父ID的ASP.Net MVC递归模型

Asp.net mvc 3 具有父ID的ASP.Net MVC递归模型,asp.net-mvc-3,recursion,model,ef-code-first,foreign-keys,Asp.net Mvc 3,Recursion,Model,Ef Code First,Foreign Keys,我似乎找不到答案,所以希望有人能帮忙。我有以下模型,可以嵌套在同一模型的其他项中,有效地创建一个n层数据集。我的模型编写如下: public partial class Resource { [Key] public int ResourceID { get; set; } [Display(Name = "Parent Resource")] public int? ParentResourceID { get; set; } public virtual Resource

我似乎找不到答案,所以希望有人能帮忙。我有以下模型,可以嵌套在同一模型的其他项中,有效地创建一个n层数据集。我的模型编写如下:

public partial class Resource
{
  [Key]
  public int ResourceID { get; set; }
  [Display(Name = "Parent Resource")]
  public int? ParentResourceID { get; set; }
  public virtual Resource ParentResource { get; set; 
  [Display(Name = "Resource Name")]
  public string Name { get; set; }
  public bool Deleted { get; set; }
}
ParentResourceID可以设置为NULL,这意味着该项位于级别1上,并且没有父项

但是,当我从分配有父资源的数据库请求项目时,ParentResource对象始终为空

我尝试了许多[ForeignKey]和[InverseProperty]的想法,但没有任何运气

我是否需要映射某个对象,以便模型知道ParentResourceID实际等于虚拟对象的ResourceID,如果需要,我该如何进行映射?

我将使用配置。它比在实体属性上使用属性灵活得多。它看起来像这样

 this.HasOptional(l => l.ParentResource)
  .WithMany(p => p.Children)
  .HasForeignKey(l => l.ParentId);
从您的模型中不清楚的是,父对象是否可以有多个子对象。假设有多个子对象,则需要将这样的属性添加到模型中

public virtual List<Resource> Children {get; set;}
公共虚拟列表子项{get;set;}