没有外键的协会

时间:2012-08-23 19:39:10

标签: c# entity-framework-4 associations

我正在尝试在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导航属性中?

1 个答案:

答案 0 :(得分: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();
    }
}

此处FirstOrDefaultCount()...First()构造更合适,因为它只会在数据库中点击一次而Count()First()会分别发出单独的查询。

您可以使用以下内容编写更紧凑的内容:

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