【发布时间】:2011-12-06 10:57:28
【问题描述】:
我正在使用 WPF/MVVM 开发应用程序。我有一个 WCF 数据服务项目,它提供了使用实体框架从 ADO.NET 数据模型中检索数据的操作。然后我有一个 wpf 客户端,它绑定到从 WCF 服务获取的视图模型属性。该方案涉及客户/办公室。客户端实体具有类型为 office 的导航属性,在数据库中实现为外键。问题是当我的视图模型从数据服务获取客户端列表时,导航属性为空。但是,服务操作会检索此信息。
WCF 服务操作
[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 服务时,它会删除客户端对象的导航属性。
请任何人解释在拨打此电话时如何保留这些信息?
提前非常感谢, 迈克
【问题讨论】:
标签: c# wpf wcf entity-framework mvvm