0

Entity Framework (Code First) を使用して、対応する顧客 ID を含むすべての注文を一覧表示する必要があります。顧客 ID は Orders テーブルの FK であるため、これは Customers テーブルにクエリを実行しなくても可能です。ただし、EF は Orders テーブルと Customers テーブルに対しても選択を生成します。

これは、Orders のクエリに使用されるエンティティ モデルとコードです。

public class Order
{
    public virtual Guid Id { get; set; }

    public virtual string Description { get; set; }

    public virtual Customer Customer { get; set; }
}

public class Customer
{
    public virtual Guid Id { get; set; }

    public virtual string Name { get; set; }
}

using (var context = new LazyLoadingEfContext())
{
    foreach (var order in context.Orders)
    {
        Console.WriteLine("Order {0}, Customer {1}", order.Description, order.Customer.Id);
    }
}

生成される SQL は次のとおりです。

SELECT 
1 AS [C1], 
[Extent1].[Id] AS [Id], 
[Extent1].[Description] AS [Description], 
[Extent1].[Customer_Id] AS [Customer_Id]
FROM [dbo].[Orders] AS [Extent1]

exec sp_executesql N'SELECT 
[Extent2].[Id] AS [Id], 
[Extent2].[Name] AS [Name]
FROM  [dbo].[Orders] AS [Extent1]
INNER JOIN [dbo].[Customers] AS [Extent2] ON [Extent1].[Customer_Id] = [Extent2].[Id]
WHERE ([Extent1].[Customer_Id] IS NOT NULL) AND ([Extent1].[Id] =     
@EntityKeyValue1)',N'@EntityKeyValue1 uniqueidentifier',
@EntityKeyValue1='FF947EF3-5A3F-4A26-BDB9-039C49F559A7'

(さらに、パラメーター @EntityKeyValue1 の値が異なる他の同一のクエリ)

関連エンティティをロードする代わりに、「親」オブジェクトから関連エンティティ ID を取得するために EF を構成する方法はありますか?

ところで、NHibernate を使用して同じシナリオをテストしましたが、Orders テーブルに対して実行されるクエリは 1 つだけです。

SELECT this_.Id as Id1_0_, this_.Description as Descript2_1_0_, 
this_.Customer_id as Customer3_1_0_ FROM [Order] this_
4

1 に答える 1

2

これを試して:

public class Order
{
    public virtual Guid Id { get; set; }

    public virtual string Description { get; set; }

    public Guid CustomerID { get; set; }

    [ForeignKey("CustomerID ")]
    public virtual Customer Customer { get; set; }
}

その後、 Customers テーブルにクエリを実行せずorder.CustomerIDに、ループ内で取得できるはずです。foreach

于 2012-12-24T18:55:05.227 に答える