使用WCF的EntityFramework - 如何返回EF实体

时间:2013-01-30 02:10:47

标签: c# .net wcf entity-framework entity-framework-5

我有一个可以运行的WCF服务,但它使用标准ADO.net来调用一些存储过程。

维护这有点麻烦和烦人,因为我调用的任何存储过程,我必须映射到DataContracts我必须手动创建然后返回为JSON。

我想将WCF服务转换为返回EntityFramework实体(因此我不必手动映射和创建数据交换)。

我的方法中有类似的东西,例如:

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. 

有谁能告诉我如何解决这个问题,或者至少为什么会这样?

note(1):我还右键单击了edmx文件并禁用了延迟加载。

note(2):我已经设置了DbContext生成器

note(3):我使用WebMessageFormat.Json的响应格式

感谢

3 个答案:

答案 0 :(得分:4)

此问题实际上非常适合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 :(得分:1)

1)在部署之前,最好在WCF测试客户端中测试您的应用程序,以便查看服务调用是否有效

2)它发生的原因是,如果你运行直接存储过程并不是真的很重要,或者如果你使用EF GetStuff_Result,你仍然必须将[DataMember]分配给GetStuff_Result类中的每个变量,这样它将序列化EF存储过程不会自动为您序列化结果。

答案 2 :(得分:1)

实际上我找到了一种更好的方法

我可以设置edmx代码生成器来使用这个: http://visualstudiogallery.msdn.microsoft.com/32c4660d-7e66-4c3a-b516-584f4f72b838

它的DbContext支持WCF(因此它生成的对象已经具有DataMember和DataContract属性)

这允许在服务中返回对象,而无需将EF对象映射到WCF对象,如COLD TOLD所建议的那样。