我有一个Category课。这也是一种自我加入。我使用了存储库模式。使用存储库可以很好地获取,插入或更新数据。但是,当我想从关系实体获取数据时,它不起作用。它引发此错误:


  你调用的对象是空的


但是,当我使用DbContext获取数据时,它可以正常工作。

public class Category
{
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
        public int? CategoryId { get; set; }

        //Navigation
        public Category Parent { get; set; }
        public virtual ICollection<Category> Children { get; set; }
}


自我加入的配置

builder.HasMany(x => x.Children)
                .WithOne(x => x.Parent)
                .HasForeignKey(g => g.CategoryId);


存储库类,用于获取所有数据

public IEnumerable<TEntity> GetAll()
{
    return Context.Set<TEntity>().AsEnumerable();
}

[HttpGet]
public JsonResult LoadCategory()
{
     var categories = unitOfWork.Category
                                .GetAll()
                                .ToList()
                                .Select(x => new
                                             {
                                                  Id = x.Id,
                                                  Name = x.Name,
                                                  CategoryName = x.Parent.Name
                                             }).ToList();
    return Json(categories);
}


在最后一种方法中,我得到了错误,但是当我使用

ProductDbContext db = new ProductDbContext();


然后就可以了。

最佳答案

LoadCategory无法正常工作吗?
假设您首先在一般情况下创建db的新实例;
并在工作时使用这种方法?尝试这个;

 [HttpGet]
public JsonResult LoadCategory()
{
     var categories = unitOfWork.Category
                                .GetAll()
                                .Select(x => new
                                             {
                                                  Id = x.Id,
                                                  Name = x.Name,
                                                  CategoryName = x.Parent.Name
                                             }).ToList();
    return Json(categories);
}

关于c# - Entity Framework 核心中的自联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55442658/

10-10 22:46