我正在这个应用程序中开发一个基于 ASP.NET MVC 4 的应用程序我有一个类别和产品表,我有一个用于保存类别的自引用模型:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public virtual Category Parent { get; set; }
public virtual ICollection<Category> Children { get; set; }
public virtual ICollection<Product> Products { get; set; }
public byte[] RowVersion { set; get; }
}
在我的服务层中,我使用这种方式来获取类别列表(GetAll 方法):
public class CategoryService : ICategoryService
{
private readonly IDbSet<Category> _category;
private readonly IUnitOfWork _uow;
public CategoryService(IUnitOfWork uow)
{
_uow = uow;
_category=uow.Set<Category>();
}
public IList<Category> GetAll()
{
return _category.Include(x => x.Parent)
.ToList();
}
}
下面是我将模型传递给局部视图的操作方法:
public ActionResult Categories()
{
var query = _categoryService.GetAll();
return PartialView("_Categories",query);
}
部分视图:
@model IEnumerable<SarbarzDarb.Models.Entities.Category>
@foreach (var item in Model)
{
if (item.Parent != null)
{
<li class="dropdown">
@Html.ActionLink(item.Parent.Name, actionName:"Category", controllerName: "Product", routeValues: new {Id=item.Id, productName=item.Name.ToSeoUrl() }, htmlAttributes:null)
</li>
}
}
一切都很好,上面的代码显示了存储在数据库中的父类别,我在类别表中的数据是这样的:
Id Name RowVersion ParentId
-- ------ ---------- --------
1 Parent1 NULL 1
2 Parent2 NULL 2
3 Child1 NULL NULL
4 child2 NULL NULL
5 child3 NULL NULL
现在我的问题是,我怎样才能在部分视图中显示子对象。
我应该在类别表中使用另一列来指定父子之间的关系吗?例如在上表中,我如何找出孩子 2 或孩子 3 的父母等等?或者哪个父母是child1的父母?
下面的代码是我的类别模型的配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>()
.HasOptional(c => c.Parent)
.WithMany(c => c.Children)
.HasForeignKey(p => p.ParentId);
base.OnModelCreating(modelBuilder);
}
例如,我在这里搜索了很多,但没有得到答案。