gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:05:59 27 4
gpt4 key购买 nike

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

步骤 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com