Northwindデータベースの2つのテーブル、つまり製品とCAの機能をテストするための2つのテーブルを含むEntity Frameworkモデルを作成しました。このEntity Frameworkクエリから生成されたSQLを理解するのに問題があります
カテゴリと商品の関連付けが自動的に作成されました.0.1〜*です。
私はこの単純なクエリ書いた:私は、SQLプロファイラを実行し、私はそれが生成したSQLを見ることができるようにコードを実行し、これはそれが発生したものです
var beverages = from p in db.Products.Include("Category")
where p.Category.CategoryName == "Beverages"
select p;
var beverageList = beverages.ToList();
を:
SELECT
[Extent1].[ProductID] AS [ProductID],
[Extent1].[ProductName] AS [ProductName],
[Extent1].[SupplierID] AS [SupplierID],
[Extent1].[QuantityPerUnit] AS [QuantityPerUnit],
[Extent1].[UnitPrice] AS [UnitPrice],
[Extent1].[UnitsInStock] AS [UnitsInStock],
[Extent1].[UnitsOnOrder] AS [UnitsOnOrder],
[Extent1].[ReorderLevel] AS [ReorderLevel],
[Extent1].[Discontinued] AS [Discontinued],
[Extent3].[CategoryID] AS [CategoryID],
[Extent3].[CategoryName] AS [CategoryName],
[Extent3].[Description] AS [Description],
[Extent3].[Picture] AS [Picture]
FROM [dbo].[Products] AS [Extent1]
INNER JOIN [dbo].[Categories] AS [Extent2]
ON [Extent1].[CategoryID] = [Extent2].CategoryID]
LEFT OUTER JOIN [dbo].[Categories] AS [Extent3]
ON [Extent1].[CategoryID] = [Extent3].[CategoryID]
WHERE N'Beverages' = [Extent2].[CategoryName]
私はなぜクエリの内部がカテゴリに参加してからそれに結合を残したのか不思議です。 selectステートメントは、左の結合テーブルのフィールドを使用しています。誰かが私にこれの理由を理解するのを助けることができますか?左結合を削除し、Extent2からプルする選択リストを変更すると、このクエリで同じ結果が得られます。どのような状況でこれは真実ではないでしょうか?
使用しているEFのバージョンは何ですか? – Sorax
私はEntity Framework 4を使用しています – Dismissile