使用Entity Framework SqlQuery填充子实体

时间:2012-10-23 13:15:39

标签: entity-framework-5

我在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来执行一些查询。

2 个答案:

答案 0 :(得分:0)

根据this explanation你不能:

  

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

(我的重点)

所以只有通过延迟加载(如果已启用),您才可以在运行Products之后加载类别的SqlQuery,这将导致n + 1个查询

答案 1 :(得分:0)

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