尝试通过WCF提交EF4实体时出现序列化错误
问题描述:
我有一个实体CustomerActivityReport,我试图通过WCF将其提交给服务器。在服务器端,我使用repository + UOW模式来更新/插入实体到数据库中。尝试通过WCF提交EF4实体时出现序列化错误
CustomerActivityReport与另一个实体LookupValue有多对多的关系。当我尝试提交CustomerActivityReport的实例时,DataContractSerializer将引发错误:“类型为'FixupCollection [CustomerActivityReport]'的对象图包含周期,如果禁用参考跟踪,则无法序列化”。即使我没有在LookupValue实体上设置关系,我也会收到此错误。
为了解决这个问题,我尝试了将[DataContract(IsReference = true)]应用到有问题的实体以及FixupCollection中。但后来我遇到了不同的问题。
尝试通过WCF提交相关实体时是否有其他人遇到类似问题?
在此先感谢您的答复。
Ryan
答
我无法使用FixupCollection工作,所以我必须将所有实体集合提交为标准Collection,然后添加逻辑服务器端以将它们更改回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;
}
我还添加了一个的AddRange方法FixupCollection:
/// <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);
}
}
答
我们遇到过类似问题的时候,我们在子对象上缺少一个属性。