我在1:n关系中有两个实体:类别和产品。
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public virtual Product { get; set; }
}
public class context : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}
可以通过预先加载来加载每个类别的产品。
context.Categories.Include(c=>c.Products).ToList()
如何在以下查询中的每个类别中加载产品,与预先加载一样?
var q = @"
SELECT Categories.*
JOIN Products
ON Category.CategoryId = Products.CategoryId";
var c = context.Categories.SqlQuery(q).ToList();
它只是一个简单的查询。我需要使用SqlQuery来执行一些查询。
答案 0 :(得分:0)
根据this explanation你不能:
应该编写查询以确保仅返回真正所请求类型的实体
(我的重点)
所以只有通过延迟加载(如果已启用),您才可以在运行Products
之后加载类别的SqlQuery
,这将导致n + 1个查询
答案 1 :(得分:0)
如果结果包含多个实体类型,我认为不可能实现从Sql查询获得的实体。