我正在尝试在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导航属性中?
答案 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();
}
}
此处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);
}
}