假设我有一个包含表的关系数据库: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/