Получить ошибку сериализации при попытке отправить объект EF4 через WCF - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть объект CustomerActivityReport, который я пытаюсь отправить на сервер через WCF.На стороне сервера я использую шаблоны репозитория + UOW для обновления / вставки сущности в БД.

CustomerActivityReport имеет отношение многие ко многим к другой сущности LookupValue.Когда я пытаюсь передать экземпляр CustomerActivityReport, DataContractSerializer выдает ошибку: «Граф объектов для типа FixupCollection [CustomerActivityReport] содержит циклы и не может быть сериализован, если отслеживание ссылок отключено».Я получаю эту ошибку, даже когда я не устанавливаю отношения для сущностей LookupValue.

Чтобы обойти это, я попытался применить [DataContract (IsReference = true)] к обеим сущностям, о которых идет речь, а такжеFixupCollection.Но тогда у меня возникают другие проблемы.

Кто-нибудь еще сталкивался с подобными проблемами при попытке отправить связанные объекты через WCF?

Заранее благодарен за любые ответы.

Райан

Ответы [ 2 ]

0 голосов
/ 29 ноября 2010

Я не мог заставить это работать с 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;
        }

Я также добавил метод 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);
        }
    }
0 голосов
/ 26 ноября 2010

Когда у нас возникала похожая проблема, нам не хватало атрибута для подобъекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...