我正在尝试关联 EF4 中的两个实体类型,但没有可用的外键。
我可以做任何手动调整吗,这样当我加载订单实例时,我会得到类似的内容:
order.orderID = 455
order.date = 2012-08-12
order.OrderItems = <List>OrderItem // OrderItem being the other entity I want to map on order
我想当我 Select() 订单并设置其 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 导航属性中?
最佳答案
您只需在查询中包含 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);
}
}
关于c# - 没有外键的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098841/