WFC数据服务填充关系

问题描述:

我需要帮助获取从WCF Dataservices到我的WP7应用程序的列表地址(地址是Person上的一个属性) 的人员列表。WFC数据服务填充关系

我有一个WCF DataService的这种方法,使用EF

[WebGet] 
public IQueryable<Person> GetPersonAdress(int id) 
{ 
    return from p in CurrentDataSource.Persons.Include("Addresses") 
      from a in c.Addresses 
      where a.Field1 > 1 
      where a.Field2 == id 
      select p; 
} 

,并在我的WP7应用程序,获得数据,我得到了一个DataService的类看起来像这样,我在那里调用该方法。 但它不工作。在BeginLoadProperty完成之前BeginExecute退出...

public class DataServices : IDataServices 
{ 
    public void LoadPersonAddress(Action<IEnumerable<Person>, Exception> callback, int id) 
    { 
     try 
     { 
      var queryString = string.Format("GetPersonAdress?id={0}", id); 

      _context.BeginExecute<Person>(new Uri(queryString, UriKind.Relative), (ar => 
      { 
       var ctx = ar.AsyncState as DBEntities; 
       var persons = new List<Person>(); 

       var results = ctx.EndExecute<Person>(ar); 

       foreach (var person in results) 
       { 
        var newPerson = new Person 
        { 
         Id = person.Id, 
         FirstName = person.FirstName, 
         LastName = person.LastName, 
        }; 

        ctx.BeginLoadProperty(person, "Adresses", (asb => 
        { 
         ctx.EndLoadProperty(asb); 

        }), person); 

        persons.Add(newPerson); 
       } 
       callback(persons, null); 

      }), _context); 
     } 
     catch (Exception ex) 
     { 
      callback(null, ex); 
     } 
    } 
} 

如何获取填充人员的地址列表?

+0

只是好奇 - 为什么你需要创建Person对象的新实例,为什么不重用查询返回的人?还要注意,考虑到上面的代码,一旦LoadProperty完成,“person”实例将获得地址,但“newPerson”不会,因为它是副本。 – 2013-03-09 21:40:11

尝试:

~/GetPersonAddress?id=12345&$expand=Addresses