Я пытаюсь запросить отдельный объект в базе данных с помощью DataServiceQuery. Сущность, которую я пытаюсь загрузить, связана с графом других сущностей, которые я также хочу загрузить. MSDN описывает здесь и здесь, что я могу загрузить указанные объекты с помощью DataServiceQuery ‹TElement› .Expand или DataServiceContext.LoadProperty.
Это отлично работает для отношений первой степени моей сущности, но у меня проблема с загрузкой отношений отношений.
Очевидно, я мог вызвать LoadProperty для всех отношений второй степени и перебрать все коллекции второй степени, но я надеялся, что смогу загрузить весь граф отношений в одном запросе. Это возможно?
Изменить
На самом деле загрузка отношений второй степени не так очевидна. Следующий код не работает (модель предметной области изменена для ясности):
var context = DataServiceReference.DataServiceContextFactory.Create();
var customer = (from c in context.Customers.Expand("Orders")
where c.CustomerId.Equals(customerId)
select c).First();
foreach (var order in customer.Orders)
{
context.LoadProperty(order, "Products");
Последняя строка выше вызывает InvalidOperationException: «Контекст в настоящее время не отслеживает объект». Я использую самонастраивающиеся сущности. Может ли эта ошибка быть связана с STE?
Как бы я хоть как-то загрузил отношения второй степени?
Решение изменить
Оказывается, DataServiceQuery ‹TElement› .Expand использует другой синтаксис пути по сравнению с ObjectQuery ‹T› .Include. В первом случае в качестве разделителя пути используется косая черта, во втором - точка. Может ли кто-нибудь объяснить, почему синтаксис непоследователен и где я могу найти документацию по синтаксису пути Expand?