【发布时间】:2011-03-17 08:58:19
【问题描述】:
我尝试使上述配置正常工作,但没有运气。
第 1 步)
我通过 WCF 服务应用程序 项目开始了一个新的解决方案。
第 2 步)
在这个项目中,我添加了一个 edmx 文件并创建了一个非常简单的模型:
具有 Id 和 DisplayName
的实体 Parent
具有 Id 和 ChildDisplayName
的实体 Child
从 Parent 到 Child、1 到 m 的关联,从而在两个实体上产生 NavigationProperties。
我生成数据库没有任何问题。生成后,我将一个 Parent 对象和两个相关的 Child 对象手动插入到数据库中。
第 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 示例 here,但这对我不起作用,因为似乎数据库生成和示例中的编码不匹配。
所以,如果有人能指导我如何完成这项工作,我将不胜感激。
附言
- 是的,所有实体类都标记为“[DataContract(IsReference = true)]”
- 延迟加载在 edmx 文件中设置为“false”
编辑:
我将 WCF 更改为托管在控制台应用程序中,而不再托管在 IIS 中。当然,我必须编写自己的小测试客户端。
有趣的是,现在一切正常。
我当然不知道为什么,但至少对于我的测试来说,这是一个解决方案……
【问题讨论】:
-
你解决了这个问题吗?我现在有了……请看:stackoverflow.com/questions/9150920/…
标签: wcf entity-framework serialization entity-framework-4 self-tracking-entities