1

我试图在 EF4 中关联两种实体类型,没有可用的外键。

有没有我可以做的手动调整,所以当我加载一个订单实例时,我会得到类似的东西:

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

我想当我选择()一个订单并设置它的 OrderItems 属性时,我必须手动执行此操作,因为没有可用的 FK。

我在正确的轨道上吗?

**编辑:

我能够在订单和订单项之间创建关联,这是我为订单提供的 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 Profiler,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();
    }
}

Also FirstOrDefault is more appropriate here than your Count()...First() construct because it hits the database only once while Count() and First() will issue a separate query each.

You can write it even more compact with:

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 回答