1

EF4 で 2 つのエンティティ タイプを関連付けようとしていますが、使用できる外部キーがありません。

注文のインスタンスをロードすると、次のような結果が得られます。

order.orderID = 455
order.date = 2012-08-12
order.OrderItems = <List>OrderItem // OrderItem being the other entity I want to map on         order

FK が利用できないため、注文を Select() して OrderItems プロパティを設定するときに、これを手動で行う必要があると思います。

私は正しい軌道に乗っていますか?

**編集:

注文と orderitems の間の関連付けを作成することができました。注文用の Select() メソッドは次のとおりです。

    public Order Select(long orderID)
    {
        using (var ctx = new BillingSystemEntities())
        {
            var res = from n in ctx.Orders
                      where n.OrderID == orderID
                      select n;
                 if (res.Count() == 0)
                    return null;
                else
                    return  res.First();
         }
    }

SQL プロファイラーによると、EF は OrderItem テーブルで JOIN を実行していません。私は自分で OrderItems ナビゲーション プロパティにそれらをロードする必要があると思いますか?

4

1 に答える 1

2

OrderItemsクエリに を含めるだけです。

public Order Select(long orderID)
{
    using (var ctx = new BillingSystemEntities())
    {
        var res = from n in ctx.Orders.Include("OrderItems")
                  where n.OrderID == orderID
                  select n;
        return res.FirstOrDefault();
    }
}

また、ここでは、データベースに一度だけヒットし、それぞれ個別のクエリを発行するため、構造体よりFirstOrDefaultも適切です。Count()...First()Count()First()

次のようにすると、さらにコンパクトに記述できます。

public Order Select(long orderID)
{
    using (var ctx = new BillingSystemEntities())
    {
        return ctx.Orders.Include("OrderItems")
            .FirstOrDefault(n => n.OrderID == orderID);
    }
}
于 2012-08-23T21:45:11.033 に答える