2012-03-26 88 views
1

我只能使用SP从数据库加载我的实体。我可以通过导入功能加载成功客户:EF4:使用SP加载导航属性

Customer cust = context.GetCustomerById(customerId); 

然后,我需要使用另一个SP加载cust.Orders集合:

IEnumerable<Order> cust_orders = context.GetOrdersByCustomerId(customerId); 

我得到具有正确设置属性与客户相关的订单列表已加载的Customer实例。当我尝试做类似的事情时出现问题:

foreach(Order ord in cust.Orders) 
{ 
    Console.WriteLine(ord.Number); // "SELECT permission required ..." exception is thrown here 
} 

有没有方法来加载订单属性而不触发选择?

+0

什么样的实体,您使用的? 'EntityObject'还是POCO? ObjectContext API或DbCotnext API? – 2012-03-26 08:17:45

+0

EntityObject和ObjectContext数据库优先方法。 – user1291948 2012-03-27 03:48:45

回答

0

你必须通过适当的SP呼吁禁用惰性加载和负载的订单,像这样:

DBContext.DataBase.SqlQuery<Order>("exec spGetOrders {0}", invoiceID).ToList(); 
+0

我该如何做'通过适当的SP调用加载订单',这样我就可以像在示例中那样执行foreach。我现在可以使用导入功能加载订单,但它们不会显示在cust.Orders集合中。 – user1291948 2012-03-27 03:47:11

+0

有人吗?我们的公司是唯一不可能通过SP限制数据访问的,并且如果EF可以在一个方向上进行关系修正,为什么不能在另一个方向执行关系修复,这意味着使用读取的子实体填充集合。它必须是可能的,因为来自MS的DataExtensions框架提供了方法绑定,这似乎正在做我所追求的。 – user1291948 2012-03-30 04:42:38