我有两个对象模型,产品和产品类别
public class Product{
int Id {get; set;}
public virtual ICollection<ProductCategory> Categories { get; set; }
}
public class ProductCategory{
int Id {get; set;}
public virtual ICollection<Product> Products { get; set; }
}
使用实体框架中的代码优先方法生成的多对多关系。
modelBuilder.Entity<Product>().
HasMany(p => p.Categories).
WithMany(c => c.Products)
.Map(m =>
{
m.MapLeftKey("ProductId");
m.MapRightKey("CategoryId");
m.ToTable("ProductJoinProductCategory");
});
当我查询
var productCategory = await db.ProductCategories.FirstOrDefaultAsync(category => category.Id == Id);
即使我的数据库中用ProductJoinProductCategory表中的几个产品填充了产品,Products集合也将返回空。
目前,我正在执行以下操作以填充产品集合
var productCategory = await db.ProductCategories.FirstOrDefaultAsync(category => category.Id == Id);
productCategory.Products = db.Products.Where(x => x.Categories.Any(p => p.Id == Id)).ToList();
有没有办法在单个查询中完成此操作?产品对象最终将与其他对象具有多对多关系,我想找到查询对象并返回其所有填充的许多字段集合的正确方法。
我认为以下应该起作用:
var productCategory = await db.ProductCategories.Include(p => p.Categories.Select(c => c.Products)).FirstOrDefaultAsync(category => category.Id == Id);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句