我有一个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/