尝试通过WCF提交EF4实体时获取序列化错误

时间:2010-11-25 17:10:19

标签: wcf c#-4.0 entity-framework-4

我有一个实体CustomerActivityReport,我试图通过WCF提交给服务器。在服务器端,我使用存储库+ UOW模式来更新/插入实体到数据库。

CustomerActivityReport与另一个实体LookupValue有多对多的关系。当我尝试提交CustomerActivityReport的实例时,DataContractSerializer会抛出错误:“类型'对象图'FixupCollection [CustomerActivityReport]'包含周期,如果禁用参考跟踪则无法序列化”。即使我没有在LookupValue实体上设置关系,我也会收到此错误。

为了解决这个问题,我尝试将[DataContract(IsReference = true)]应用于有问题的实体以及FixupCollection。但后来我遇到了不同的问题。

在尝试通过WCF提交相关实体时是否有其他人遇到类似问题?

提前感谢您的回复。

赖安

2 个答案:

答案 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);
        }
    }