Как я могу отправить иерархические данные поверх odata v2?
Используя WCF Data Services 4.0, я не могу получить иерархические данные для возврата. У меня есть класс Employee, у которого есть коллекция EquipmentIds. Эти идентификаторы оборудования теряются по проводам. Вот мой код:
public class ODataV2 : DataService<ODataV2Model>
{
public static void InitializeService(DataServiceConfiguration config)
{
config.UseVerboseErrors = true;
config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
}
}
public class ODataV2Model
{
public ODataV2Model()
{
Employees = new List<Employee>{
new Employee { Id = 1, Name="Doug", EquipmentIds = new List<Equipment> { new Equipment { Id = 1 },new Equipment { Id = 2 } }.AsQueryable()},
new Employee { Id = 2, Name= "George", EquipmentIds = new List<Equipment> {new Equipment { Id = 3}, new Equipment { Id = 5} }.AsQueryable() }
}.AsQueryable();
}
public IQueryable<Employee> Employees { get; private set; }
public IQueryable<Equipment> EquipmentIds { get; private set; }
}
[DataServiceKey("Id")]
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public IQueryable<Equipment> EquipmentIds { get; set; }
}
[DataServiceKey("Id")]
public class Equipment
{
public int Id { get; set; }
}
Когда я запускаю LinqPad на нем, я получаю это:
У меня должны быть обе коллекции EquipmentIds со счетчиками 2, но у меня есть 0. Я не получаю сообщение об ошибке, но данные никогда не поступают клиенту.
Я перешел на WCF Data Services v 5.0, и он успешно работает на стороне.NET, но я теряю возможность выполнять запросы с помощью LinqPad. Есть ли способ, чтобы это работало в v 4.0?
Если нет, есть ли способ обновить LinqPad для распознавания odata v3 (WCF Data Services 5.0)?
1 ответ
Запрос ~/Employees будет включать только сущности Employee, а не какое-либо содержимое свойства навигации. Это должно уменьшить размер полезной нагрузки. Если вы действительно хотите включить некоторые свойства навигации, просто укажите, например, ~/Employees?$ Expand=EquipmentIds.