我有一个实体CustomerActivityReport,我试图通过WCF提交给服务器。在服务器端,我使用存储库+ UOW模式来更新/插入实体到数据库。
CustomerActivityReport与另一个实体LookupValue有多对多的关系。当我尝试提交CustomerActivityReport的实例时,DataContractSerializer会抛出错误:“类型'对象图'FixupCollection [CustomerActivityReport]'包含周期,如果禁用参考跟踪则无法序列化”。即使我没有在LookupValue实体上设置关系,我也会收到此错误。
为了解决这个问题,我尝试将[DataContract(IsReference = true)]应用于有问题的实体以及FixupCollection。但后来我遇到了不同的问题。
在尝试通过WCF提交相关实体时是否有其他人遇到类似问题?
提前感谢您的回复。
赖安
答案 0 :(得分:0)
我们遇到类似问题的时间我们在子对象上缺少一个属性。
答案 1 :(得分:0)
我无法使用FixupCollection,因此我必须将所有实体集合作为标准集合提交,然后添加逻辑服务器端以将它们更改回FixupCollection。
客户端:
convertedCustomerActivityReport.LookupValues = new Collection<LookupValue>()
服务器:
public virtual ICollection<LookupValue> LookupValues
{
get
{
if (_lookupValues == null || _lookupValues is Array)
{
var newCollection = new FixupCollection<LookupValue>();
newCollection.CollectionChanged += FixupLookupValues;
newCollection.AddRange(_lookupValues);
_lookupValues = newCollection;
}
return _lookupValues;
}
我还为FixupCollection添加了一个AddRange方法:
/// <summary>
/// Adds multiple items.
/// </summary>
/// <param name="items">The items to add.</param>
public void AddRange(IEnumerable<T> items)
{
if (items == null)
{
return;
}
foreach (var item in items)
{
this.Add(item);
}
}