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