c# - 当通过 WCF 发送对象时,如何处理 LINQ to SQL DataContext 中的关系成员?

标签 c# .net wcf linq-to-sql

假设我有一个包含表的关系数据库:OrderableCategories 和 Orderables。它们是一对多的关系,一个 OrderableCategory 附加到多个 Orderables。因此,LINQ 中的 OrderableCategory 实例具有成员:ID , Name和一个 EntitySet<Orderable> Orderables .虽然通过 WCF 发送(wsHttpBinding,如果它无论如何都很重要),EntitySet 被转换为简单的 Orderable[] .一个Orderable实例还包含一个名为 OrderableCategory 的成员这只是此可订购类别的一个实例。通过 WCF 发送时,我猜会发生这样的事情:Orderable实例填充其 OrderableCategory具有此类别的字段的实例,但它的 Orderable[]也充满了该类别中的其他可订购商品。这些 orderables 有其 OrderableCategory再次填充此类别等等,以便我理论上可以调用(对于收到的可订购 o):o.OrderableCategory.Orderables[0].OrderableCategory.Orderables[0]. (...)等等。我只是猜测服务器进入无限循环,当消息大小超过配额时,它会断开连接并且我看到服务关闭异常。我怎样才能避免这种情况并在我的数据库中获得关系的好处?我认为我的怀疑是正确的,因为当我禁用其中一个属性(在 LINQ 类设计器中使其成为内部属性)时,数据仅“单向”填充并且 Orderable不再是它的 OrderableCategory成员(member),有效。但我想知道这是否可以在不损害属性(property)的情况下实现。

最佳答案

这必须通过使用 DataContract 属性标记实体并将其 IsReference 属性设置为 true 来处理。这将指示 DataContractSerializer 跟踪引用而不是像您描述的那样序列化对象。

Linq-To-Sql 设计器/SqlMetal 应该通过将 Serialization Mode 设置为 Unidirectional 来为您执行此操作。

关于c# - 当通过 WCF 发送对象时,如何处理 LINQ to SQL DataContext 中的关系成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693802/

相关文章:

c# - 将 Stream 转换为 IEnumerable。如果可能当 "keeping laziness"

c# - 我怎么知道 automapper 是否已经初始化?

c# - 如何正确更改字体大小 :x% with pt or px?

python - 重写 MS 堆栈 : jQuery/C#/SQL Server

c# - VS2013 ASP.NET MVC 单页应用程序模板自动重定向

c# - Elmah:如何从错误报告中获取 JSON HTTP 请求正文

c# - WCF 服务在每次调用时实例化

.net - WCF Web API 与 ASP.NET MVC JSON Web 服务

wcf - Windows 服务总线 1.0、Appfabric、Netmessaging 绑定(bind)失败

WCF 调用未在 Fiddler2 中显示