我有两个对象模型,Product&产品类别
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();
有没有办法在单个查询中完成此操作?产品对象最终将与其他对象有多个多对多的关系,我想找出查询对象的正确方法,并在完全填充所有多个字段集合的情况下返回它。
答案 0 :(得分:1)
我认为以下内容应该有效:
var productCategory = await db.ProductCategories.Include(p => p.Categories.Select(c => c.Products)).FirstOrDefaultAsync(category => category.Id == Id);