2010-11-25 3 views
0

J'ai une entité CustomerActivityReport que je suis en train de soumettre au serveur via WCF. À la fin du serveur j'utilise les modèles de référentiel + UOW pour mettre à jour/insérer l'entité dans la base de données. CustomerActivityReport a une relation many to many avec une autre entité LookupValue.erreur de sérialisation lorsque vous essayez et soumettre entité EF4 via WCF

Lorsque j'essaie de soumettre une instance de CustomerActivityReport, DataContractSerializer renvoie l'erreur: «Le graphique d'objet pour le type 'FixupCollection [CustomerActivityReport]' contient des cycles et ne peut pas être sérialisé si le suivi des références est désactivé». J'obtiens cette erreur même lorsque je ne définis pas la relation sur les entités LookupValue. Pour contourner ce problème, j'ai essayé d'appliquer [DataContract (IsReference = true)] à la fois aux entités en question et à FixupCollection. Mais ensuite, j'ai des problèmes différents.

Est-ce que quelqu'un d'autre a rencontré des problèmes similaires en essayant de soumettre des entités liées sur WCF?

Merci à l'avance pour toute réponse.

Ryan

Répondre

0

Je ne pouvais pas obtenir ce travail avec FixupCollection, et j'ai donc dû soumettre toutes mes collections d'entités en collection standard, puis ajouter la fin du serveur logique pour les remettre dans FixupCollection.

Client:

convertedCustomerActivityReport.LookupValues = new Collection<LookupValue>() 

Serveur:

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; 
     } 

J'ai aussi ajouté une méthode 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

Les temps que nous avons eu un problème similaire nous manque un attribut sur un objet secondaire.

Questions connexes