C# 实体框架核心中的自连接

C# 实体框架核心中的自连接,c#,asp.net,C#,Asp.net,我有一个类别类。它也是一个自联接。我使用了存储库模式。使用存储库可以很好地获取、插入或更新数据。但是,当我想从关系实体获取数据时,它不起作用。它抛出以下错误: 对象引用未设置为对象的实例 但是,当我使用DbContext获取数据时,效果很好 public class Category { public int Id { get; set; } [Required] public string Name { get; set; } p

我有一个
类别
类。它也是一个自联接。我使用了存储库模式。使用存储库可以很好地获取、插入或更新数据。但是,当我想从关系实体获取数据时,它不起作用。它抛出以下错误:

对象引用未设置为对象的实例

但是,当我使用
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; }
}
用于获取所有数据的存储库类

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);
}

然后它就工作了。

LoadCategory工作不正常? 假设您在上面创建了一个新的db实例作为general; 如果是工作,就这样使用?试试这个

 [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);
}

我发现了问题所在。CategoryId可以为null。所以,如果任何项CategoryId为null,则抛出错误。我只是检查是否为空,然后neme将为空

var categories = unitOfWork.Category
                           .GetAll()
                           .Select(x => new
                                         {
                                           Id = x.Id,
                                           Name = x.Name,
                                           CategoryName = x.CategoryId == null ? "" : x.Parent.Name

                                         }).ToList();

GetAll已经过测试。它在我的代码中使用了超过20次,没有任何问题。
 [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);
}
var categories = unitOfWork.Category
                           .GetAll()
                           .Select(x => new
                                         {
                                           Id = x.Id,
                                           Name = x.Name,
                                           CategoryName = x.CategoryId == null ? "" : x.Parent.Name

                                         }).ToList();