我的数据库中Tables
与Silverlight
客户端之间存在大量关系,该客户端WCF service
侧ASP.Net
与我的服务器连接。
首先,我使用LINQ to SQL
作为对象的强大映射器表,并使用WebMethod
返回数据库对象的List<Foo>
(假设为GetFoo()
)。 Foo
与其他对象有很多关系,每个对象都有很多realaships,(这意味着表之间有PK和FK)。我还使用Microsoft Service Trace Viewr
跟踪我的服务< / p>
当我调用GetFoo()时,WCF返回此错误:
“X.Y.Z”类型的对象图包含循环,如果是,则无法序列化 参考跟踪已禁用
我搜索了这个错误并找到了this great post,但这样做不正常,我也看到同样的错误。
答案 0 :(得分:5)
各种选择:
我会在“DTO模式”类别中坚决投票;简单地说,拥有一个单独的模型意味着每当你调整数据库时你就不太可能遇到纠结 - 你完全可以控制它。
答案 1 :(得分:2)
有点晚了。但是,如果有人使用linqtosql并遇到此问题,您只需打开dbml类中的表即可。右键单击表格旁边的,然后单击属性。 如果有一个名为Serialization Mode的属性,请将其设置为Unidirectional
错误将消失
答案 2 :(得分:1)
我现在知道这是一个老问题,但您是否尝试使用[DataContract(IsReference = True)]来装饰DBML生成的类?
我在2010年遇到了同样的问题,并且不得不采取一些相当极端的措施让它在客户端和服务方面工作,但最近通过VS2013 / .NET 4.5重新使用它并且没有那么痛苦,正如记录的那样这里(使用EF v6 RC 1 POCO对象):http://sanderstechnology.com/2013/more-with-the-entity-framework-v6-rc1/12423/