1

我在 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()

如何在以下查询中加载每个类别中的产品,与 Eager 加载相同?

var q = @"
   SELECT Categories.*
   JOIN Products
   ON Category.CategoryId = Products.CategoryId";
var c = context.Categories.SqlQuery(q).ToList();

它只是一个简单的查询。我需要使用 SqlQuery 来执行一些查询。

4

2 回答 2

0

根据这个解释,你不能:

应该编写查询以确保它只返回真正属于请求类型的实体

(我的重点)

因此,只有通过延迟加载(如果启用),您才能在运行后加载类别Products这将导致 n+1 个查询。SqlQuery

于 2012-10-23T21:05:05.837 回答
0

如果结果包含多个实体类型,我认为不可能物化从 Sql 查询获得的实体。

于 2012-10-23T21:06:43.580 回答