我有一个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);
}
我发现了问题。 CategoryId为null。因此,如果任何项目CategoryId为null,则抛出错误。我只检查null是否为neme将为空。
var categories = unitOfWork.Category
.GetAll()
.Select(x => new
{
Id = x.Id,
Name = x.Name,
CategoryName = x.CategoryId == null ? "" : x.Parent.Name
}).ToList();