我尝试让上面的配置工作,但没有运气。
步骤1)
我使用 WCF服务应用程序项目开始了一个新的解决方案。
第2步)
在这个项目中,我添加了一个edmx文件并创建了一个非常简单的模型:
实体 父 , ID 和 DisplayName
实体 儿童 , Id 和 ChildDisplayName
从 Parent 到 Child , 1-to-m 的关联,导致两个实体上的NavigationProperties。
我没有任何问题地生成数据库。生成后,我手动将一个 Parent 对象与两个相关的 Child 对象插入数据库。
第3步)
我使用 ADO.NET自我跟踪实体生成器 添加了代码生成。 我知道这应该在不同的程序集中完成,但为了使它简单直接,我把它全部放在同一个项目(WCF项目)
第4步)
我刚刚更改了IService接口以创建一个简单的get
[OperationContract]
Parent GetRootData(Int32 Id);
在相应的实现中,我从上下文中获取 Page 对象并将其返回:
using (PpjSteContainer _context = new PpjSteContainer() )
{
return _context.ParentSet.Include("Child").Single(x => x.Id == Id);
}
问题:
如果我现在运行此项目(Service1.svc是起始页面),VS2010会自动生成测试客户端以调用该服务。但是一旦我调用该服务,我就会得到一个StackOverflowException!服务器端的调试看起来没问题,直到它返回对象图。
如果我删除包含(“儿童”)一切正常,但当然现在缺少 Child 对象。
我不知道我错过了什么。我读了很多howto和指南,但所有这些都是按照我做的方式做的(至少我认为这样)...
我尝试了学校示例here,但这对我不起作用,因为似乎数据库生成和示例中的编码不匹配。
所以,如果有人能指导我如何完成这项工作,我将非常感激。
P.S。
修改
我将WCF更改为在控制台应用程序中托管,而不再在IIS中托管。当然,我必须编写自己的小测试客户端
有趣的是,现在一切正常。
我当然不知道为什么,但至少在我的测试中这是一个解决方案......