我正在使用 EF 和 WCF。我想使用 EF 生成的对象作为从 Web 服务方法返回的对象。在 OperationContract 方法中,我执行以下操作:
try
{
b = (from bon in this.znDbContext.BonSet
where bon.IdPr == pa.IdPr
select bon).First();
}
catch (InvalidOperationException) { }
return b;
如果我调用 Web 服务方法,我将收到以下错误消息:
调用服务失败。可能原因:服务离线或无法访问;客户端配置与代理不匹配;现有代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理、恢复到默认配置或刷新服务来恢复。
在谷歌上搜索我找到了解决这个问题的解决方案。此声明已添加:
this.znDbContext.Configuration.ProxyCreationEnabled = false;
以这种方式,客户端从 Web 服务方法接收响应,但每个内部对象都有空值。如果我删除前面的语句并执行对象的副本(逐个字段),客户端会收到正确设置内部对象的对象(即 boni.User)。例如我这样做:
boni = new Bon();
User u = new User();
boni.IdPr = b.IdPr;
boni.Date = b.Date;
boni.System = b.System;
u.Id = b.User.Id;
u.Name = b.User.Name;
u.Login = b.User.Login;
boni.User = u;
return boni;
有没有一种方法可以返回一个包含所有内部对象的完整对象,而无需执行类似“克隆”操作的操作?我想要从 DbContext 中分离对象以获得一个新对象,从而避免手动复制操作。
对问题原因的理论解释非常受欢迎。