1

我有 2 个表,单元和子单元,具有一对多的关系:一个单元可以有 0 个或多个子单元。

我在 WCF Windows 服务中使用 Linq to SQL(.dbml 文件)来访问数据库。

使用服务客户端,我调用任何方法来检索单元或子单元,它工作正常......只要数据库中没有子单元(子单元表中的 0 行)。

如果有 1 个或多个子单元,则在调用相同的方法时会出现以下错误:

  • “套接字连接被中止......”
  • 内部异常“读取操作失败,请参阅内部异常。”
  • 内部异常“套接字连接被中止......”
  • 内部异常“现有连接被远程主机强行关闭”

我已经删除了表并重新创建了它们,我已经将 Unit/SubUnit 表重新添加到 DBML,重新安装了服务等。我以前从未遇到过这个问题。

我了解“套接字中止”错误可能是由于尝试通过 WCF 传递过多数据而导致的,但目前数据库中有 1 个单元和 1 个子单元,但我仍然收到此错误!

任何人都可以对此有所了解吗?

4

2 回答 2

0

您需要添加 [DataContract(IsReference = true)] attr。到您的实体。

于 2015-03-26T14:03:00.797 回答
-1

一旦我在 wcf 服务中使用实体框架时在 db 上引入了外键,使用 wcf 客户端就会出现完全相同的错误/问题。

实体框架的服务器端调用和业务逻辑与 FK 一起工作得很好,但客户端在连接到服务时被炸毁(返回列表)。

我正在使用 .edmx 以及 EF 5.x DBContext Generator。

我不得不关闭所有导航属性的延迟加载。

即在我的模型模板中,删除模板中的“虚拟”关键字:

public string AccessibilityAndVirtual(string accessibility)
    {
        return accessibility + (accessibility != "private" ? " virtual" : "");
    }

看到很棒的帖子!

于 2014-01-14T23:36:44.110 回答