2012-03-26 106 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