wcf - EF4 自跟踪实体和 WCF 序列化导致堆栈溢出

标签 wcf entity-framework serialization entity-framework-4 self-tracking-entities

我尝试使上述配置正常工作,但没有成功。

步骤 1)

我通过 WCF 服务应用程序 项目启动了一个新的解决方案。

步骤 2)

在这个项目中,我添加了一个 edmx 文件并创建了一个非常简单的模型:
具有 IdDisplayName
父级实体 具有 IdChildDisplayName 的实体 Child
1对m的关联,导致两个实体上都有NavigationProperties。
我生成的数据库没有任何问题。生成后,我将一个 Parent 对象和两个相关的 Child 对象手动插入到数据库中。

步骤 3)

我使用ADO.NET 自跟踪实体生成器添加了代码生成。 我知道这应该在不同的程序集中完成,但为了使其简单明了,我将其全部放入同一个项目(WCF 项目)

步骤 4)

我刚刚更改了 IService 接口(interface)来创建一个简单的 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 对象现在丢失了。
我不知道我错过了什么。我读了很多方法和指南,但都是按照我的方式做的(至少我是这么认为的)...
我尝试了学校示例 here ,但这对我不起作用,因为示例中的数据库生成和编码似乎不匹配。

因此,如果有人能指导我如何完成这项工作,我将不胜感激。

附注

  • 是的,所有实体类都标记为“[DataContract(IsReference = true)]”
  • 在 edmx 文件中将延迟加载设置为“false”

编辑:
我将 WCF 更改为托管在控制台应用程序中,而不再托管在 IIS 中。当然,然后我必须编写自己的小测试客户端。
有趣的是,现在一切正常了。 我当然不知道为什么,但至少对于我的测试来说,这是一个解决方案......

最佳答案

看看here 。基本上,您必须使序列化器了解导航属性中的循环。

关于wcf - EF4 自跟踪实体和 WCF 序列化导致堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5336868/

相关文章:

c# - DbContext 在多个 Controller 中使用 - 如何做到这一点?

c# - "Both use the XML type name X, use XML attributes to specify a unique XML name and/or namespace for the type"怎么解决?

c# - 在 WCF Json 序列化中包含类名称

WCF 服务。在哪里添加。 .svc 文件

c# - 无法在同一解决方案中为 WCF 项目的客户端类添加服务引用

c# - 如何使 WCF RESTful 服务异步工作?

c# - 返回类型不正确,但我不明白它应该是什么

.net - 如何处理 WCF 的 MSMQ 绑定(bind)中的消息失败

entity-framework - 如何使用 Entity Framework Core 2.1 查询多对多关系?

ruby - 如何暂停 Ruby 脚本的执行并将进程序列化到磁盘?