2012-03-26 3 views
1

Я могу использовать только SP для загрузки объектов из базы данных. Я могу успешно загружать клиент с помощью функции импорта:EF4: Загрузка свойств навигации с использованием SP

Customer cust = context.GetCustomerById(customerId); 

Затем нужно загрузить коллекцию cust.Orders с использованием другого SP:

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

я получаю список связанных заказов, которые имеют свойство клиента правильно установлен в уже загруженный экземпляр клиента. Проблема возникает, когда я пытаюсь сделать что-то вроде:

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

Есть ли способ загрузить Orders свойства без запуска Select?

+0

Каких лиц вы используете? 'EntityObject' или POCO? API ObjectContext или API DbCotnext? –

+0

EntityObject и ObjectContext - подход к базе данных. – user1291948

ответ

0

Вы должны отключить LazyLoading и загружать заказы через соответствующий вызов SP, например:

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

Как мне выполнить загрузку заказов с помощью соответствующего вызова SP, чтобы я мог сделать foreach, как в примере. Я могу загрузить Заказы, используя функцию импорта, но они не отображаются в коллекции cust.Orders. – user1291948

+0

Кто-нибудь? Невозможно, чтобы наша компания была единственной, ограничивающей доступ к данным через SP, и если EF может выполнять корреляцию отношений в одном направлении, почему бы не сделать это в другом, то есть заполнить коллекцию с помощью считываемых дочерних объектов. Это должно быть возможно, так как инфраструктура DataExtensions из MS предоставляет метод Bind, который, кажется, делает то, что мне нужно. – user1291948

Смежные вопросы