Метод LoadProperty не использует какие-либо стандартные типы, доступные вам в dataservice. Однако служба данных достаточно умна, чтобы понять, что
LoadProperty(person, "Gender")
совпадает с
person.Gender = (from g in ent.Person
where g.ID == person.ID
select g.Gender).FirstOrDefault();
Сгенерированный Uri такой же.
http://localhost/WebDataService.svc/Person(1)/Gender
Так что, если вы хотите вызвать LoadProperty в пакетном запросе, вы можете довольно легко сгенерировать Uri. Смотри ниже.
public static class DataServiceContextExtensions
{
public static Uri GetLoadPropertyUri(this DataServiceContext context, object entity, string property)
{
Uri entityUri = null;
if(context.TryGetUri(entity, out entityUri))
{
return new Uri(entityUri.AbsoluteUri + "/" + property);
}
throw new DataServiceClientException("Entity Uri not found.");
}
public static DataServiceRequest<T> GetLoadPropertyRequest<T>(this DataServiceContext context, object entity, string property)
{
return new DataServiceRequest<T>(context.GetLoadPropertyUri(entity, property));
}
}
Итак, теперь вы можете сделать это.
ctx.BeginExecuteBatch(BatchCallback, objState, new []{
ctx.GetLoadPropertyRequest<Address>(c, "Address"),
ctx.GetLoadPropertyRequest<Phone>(c, "Phone"),
ctx.GetLoadPropertyRequest<Email>(c, "Email"),
GetOtherNonPropertyQuery()
});
Осталось только то, что это вернет вам только тот объект (объекты), что он не сделает, это присвоит возвращаемое значение (я) свойству объекта, что вам придется сделать это самостоятельно на вашем BatchCallback.
Во всяком случае, Питер Хоуп, это поможет вам в том, что вы хотите.
Если вам что-то понадобится, дайте мне знать
Привет
Daniel