我正在使用EF和WCF。 我想使用由EF生成的对象作为从Web服务方法返回的对象。 在OperationContract的方法,我做这样的事情:如何将EF对象作为WCF方法返回结果
try
{
b = (from bon in this.znDbContext.BonSet
where bon.IdPr == pa.IdPr
select bon).First();
}
catch (InvalidOperationException) { }
return b;
如果我调用Web服务方法,我会收到以下错误信息:
无法调用服务。可能的原因:该服务离线 或无法访问;客户端配置与 代理不匹配;现有的代理无效。有关更多详细信息,请参阅 的堆栈跟踪。您可以尝试通过启动新代理,将 恢复为默认配置或刷新服务来进行恢复。
在google上搜索我找到了解决此问题的解决方案。已添加此语句:
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中分离对象以获得避免手动复制操作的新对象。
这个问题的理论解释非常受欢迎。
我已经使用这个外部工具来自动生成DTOs对象:http://entitiestodtos.codeplex.com/wikipage?title=Using%20EntitiesToDTOs.v3.%2a&referringTitle=Using%20EntitiesToDTOs 现在工作得很好。 我希望它可以有用。 – f0rb1dd3n403 2013-04-30 23:16:32