下面是模型。
class Product
{
public int Id { get; set; }
public ICollection<Categorization> Categorization { get; set; }
}
class Categorization
{
public int ProductId { get; set; }
public Product Product { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
}
class Category
{
public int Id { get; set; }
public ICollection<Categorization> Categorization { get; set; }
}我试图列出所有的产品和他们的类别以及。API代码如下
foreach (var product in _context.Products.ToList()){
var categories = product.Categorization.Select(c => c.Category);
...
}当我们调用Api时,我得到以下错误:
System.ArgumentNullException:值不能为空。 参数名称:源 在System.Linq.Enumerable.SelectTSource,TResult
发布于 2018-09-19 18:35:14
product.Categorization是空的,因为它没有加载。如果期望延迟加载来处理负载,则必须使product.Categorization属性变为虚拟(以及希望在Categorization类中加载的属性,在本例中为Category )
编辑:在您的示例中,您应该希望使用Include和ThenInclude加载数据,因为您知道需要这些数据:
_context.Products
.Include( p => p.Categorization )
.ThenInclude( c => c.Category )
.ToList()发布于 2018-09-20 01:46:36
为了查询所有产品及其类别,您可以尝试使用Include和ThenInclude,如下所示:
public async Task<IActionResult> GetAllArticleAsync()
{
var articles = await _context.Articles
.Include(a => a.ArticleTags)
.ThenInclude(at => at.Tag)
.Select(a => new
{
Id = a.Id,
ArticleName = a.ArticleName,
Tags = a.ArticleTags.Select(at => at.Tag).ToList()
})
.ToListAsync();
return Ok(articles);
}为此,您需要在opt.SerializerSettings.ReferenceLoopHandling中配置Startup.cs,如下所示:
services.AddMvc()
.AddJsonOptions(opt => opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);要获得完整的演示,请参阅EFCorePro
发布于 2018-09-19 18:37:34
尝试添加虚拟对象,如下所示:
class Product
{
public int Id { get; set; }
public virtual ICollection<Categorization> Categorization { get; set; }
}
class Categorization
{
public int ProductId { get; set; }
public virtual Product Product { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
class Category
{
public int Id { get; set; }
public virtual ICollection<Categorization> Categorization { get; set; }
}https://stackoverflow.com/questions/52412120
复制相似问题