带有 WCF 的实体框架 - 如何返回 EF 实体
本文关键字:实体 返回 何返回 EF WCF 框架 带有 | 更新日期: 2023-09-27 17:56:40
我有一个可以工作的WCF服务,但它使用标准 ADO.net 来调用一些存储过程。
维护起来有点混乱和烦人,因为我调用的任何存储过程都必须映射到我必须手动创建的数据合同,然后作为 JSON 返回。
我想将 WCF 服务转换为返回实体框架实体(这样我就不必继续手动映射和创建数据协定)。
我的方法中有这样的东西,例如:
public List<GetStuff_Result> GetStuff(string param1)
{
...
StuffEntities ctx = new DataContracts.StuffEntities();
List<GetStuff_Result> list = ctx.GetStuff(5463, "test").ToList();
return list;
}
我已经在 edmx 模型中设置了存储的过程以返回GetStuff_Result(我导入了存储过程并使用了"创建复杂函数")
我已经调试了这个,我在列表中得到了 2 个结果,但是当我通过浏览器调用我的 WCF 方法时,我在浏览器 (chrome) 上收到一条消息:
No data received
Unable to load the web page because the server sent no data.
Here are some suggestions:
Reload this web page later.
Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.
谁能告诉我如何解决这个问题,或者至少为什么会发生这种情况?
注意(1):我还右键单击EDMX文件并禁用了延迟加载。
注意 (2):我已经设置了一个 DbContext 生成器
注意(3):我使用WebMessageFormat.Json的响应格式
谢谢
此问题实际上非常适合 WCF 数据服务(与 WCF SOAP 无关)。
http://msdn.microsoft.com/en-us/library/dd744841.aspx
默认情况下,WCF 数据服务将以 XML 格式返回数据,但是有一个请求参数告诉它返回 JSON
http://blogs.msdn.com/b/writingdata_services/archive/2011/02/25/getting-json-out-of-wcf-data-services.aspx
1) 在部署应用程序之前,最好在 WCF 测试客户端中测试应用程序,以便查看服务调用是否有效
2) 发生这种情况的原因是,运行直接存储过程还是使用 EF 执行该过程并不重要,GetStuff_Result您仍然必须将[DataMember]
分配给 GetStuff_Result 类中的每个变量,以便对其进行序列化 EF 存储过程不会自动为您序列化结果。
实际上,我找到了更好的方法来做到这一点
我可以设置 edmx 代码生成器来使用这个:http://visualstudiogallery.msdn.microsoft.com/32c4660d-7e66-4c3a-b516-584f4f72b838
它的 DbContext 具有 WCF 支持(因此它生成的对象已经具有 DataMember 和 DataContract 属性)
这允许在服务中返回对象,而无需将 EF 对象映射到 WCF 对象,如 COLD TOLD 所建议的那样。