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);
}
}
}
如何获取填充人员的地址列表?
答
尝试:
~/GetPersonAddress?id=12345&$expand=Addresses
只是好奇 - 为什么你需要创建Person对象的新实例,为什么不重用查询返回的人?还要注意,考虑到上面的代码,一旦LoadProperty完成,“person”实例将获得地址,但“newPerson”不会,因为它是副本。 – 2013-03-09 21:40:11