我尝试使上述配置正常工作,但没有运气。
步骤1)
我使用WCF 服务应用程序项目开始了一个新的解决方案。
第2步)
在这个项目中,我添加了一个 edmx 文件并创建了一个非常简单的模型:
Entity Parent with Id and DisplayName
Entity Child with Id and ChildDisplayName
Association from Parent to Child , 1-to-m,导致两个实体的 NavigationProperties。
我生成数据库没有任何问题。生成后,我将一个带有两个相关子对象的父对象手动插入到数据库中。
步骤 3)
我使用ADO.NET Self-Tracking Entity Generator添加了代码生成。我知道这应该在不同的程序集中完成,但为了使其简单明了,我将它们全部放在同一个项目(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!在返回对象图之前,服务器端的调试看起来没问题。
如果我删除Include("Child")一切都很好,但是现在当然缺少Child对象。
我不知道我错过了什么。我阅读了很多操作指南和指南,但都按照我的方式进行操作(至少我是这么认为的)......我在这里
尝试了 School 示例,但这对我不起作用,因为它似乎是数据库生成和示例中的编码不匹配。
所以,如果有人能指导我如何完成这项工作,我将不胜感激。
附言
- 是的,所有实体类都标记为“[DataContract(IsReference = true)]”
- 延迟加载在 edmx 文件中设置为“false”
编辑:
我将 WCF 更改为托管在控制台应用程序中,而不再托管在 IIS 中。当然,我必须编写自己的小测试客户端。
有趣的是,现在一切正常。我当然不知道为什么,但至少对于我的测试来说,这是一个解决方案......