1

カテゴリと製品の 2 つのエンティティが 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; }
}

Eager ロードにより、あらゆるカテゴリの製品をロードすることが可能です。

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 に答える