我正在使用WPF/MVVM开发一个应用程序。我有一个WCF数据服务项目,提供使用实体框架从ADO.NET数据模型中检索数据的操作。然后我有一个wpf客户端,它绑定到从WCF服务获取的viewmodel属性。场景涉及客户/办公室。客户实体具有类型为office的导航属性,作为数据库中的外键实现。问题是,当我的viewmodel从数据服务获取客户列表时,导航属性为空。但是服务操作确实检索到了这些信息。
WCF服务操作
如果我在调用此方法后检查Clients属性,则导航属性现在为空,因此我放置的消息框调用会抛出空指针异常。看起来,当它通过WCF服务传递时,它会删除客户端对象的导航属性。
请问如何在进行此调用时保留此信息?
非常感谢您的帮助, Mike
[OperationContract]
public IEnumerable<Client> GetClientsByOffice(int officeID)
{
using (var context = new LDC_Entities())
{
var result = context.Clients.Include("Registered_Office")
.Where(c => c.Registered_Office_ID == officeID).ToList();
result.ForEach(c => context.Detach(c));
return result;
}
}
正如您所看到的,办公室属性是在上下文查询中加载的。如果我在此处设置断点,结果变量将保存客户信息,并且导航属性也按预期填充。
WPF视图模型
private void RefreshClients()
{
serviceClient.GetClientsByOfficeCompleted += (s, e) =>
{
Clients = e.Result;
foreach (Client c in Clients)
MessageBox.Show(c.Office.City);
};
this.serviceClient.GetClientsByOfficeAsync(CurrentOffice.Office_ID);
}
如果我在调用此方法后检查Clients属性,则导航属性现在为空,因此我放置的消息框调用会抛出空指针异常。看起来,当它通过WCF服务传递时,它会删除客户端对象的导航属性。
请问如何在进行此调用时保留此信息?
非常感谢您的帮助, Mike