2012-04-07 7 views
3

hinzugefügt werden Ich habe google gesucht und erschöpft ein gutes Stück meiner Zeit versucht, herauszufinden, was mit meinem WCF und Client Windows Form App los ist .WCF Saving EF 4.1 Artikel wirft Ausnahme Ein Element kann nicht zu einer festen Größe Array des Typs

ich ständig bin immer die folgenden Fehler

"Unable to set field/property Ingredients on entity type Datalayer.UnitOfMeasure. See InnerException for details." 
... 
inner exception is 
"An item cannot be added to a fixed size Array of type 'Datalayer.Ingredient[]'." 


Stack Trace - 
    at System.Data.Objects.Internal.PocoPropertyAccessorStrategy.<AddToCollection>b__0[T](Object collectionArg, Object item) 
     at System.Data.Objects.Internal.PocoPropertyAccessorStrategy.CollectionAdd(RelatedEnd relatedEnd, Object value) 

Die Art, wie ich meine Lösungen, die ich einen WCF-Web-Dienst so konfiguriert habe, die meine Datalayer Klassenbibliothek, ich habe einen Windows-Anwendung (Test-App), die Referenzen die WCF-Dienste sowie das DataLayer-Projekt.

Wenn ich den Datalayer in meinem Test-App verweisen nicht, diese Probleme treten jedoch nicht ich die ICollection<Ingredient> auf einfache Ingredient[] Array verlieren. Nun, wie Sie sehen können, wird dies zu einem Programmierfehler, um das Array jedes Mal zu initialisieren.

Irgendeine Idee jemand? Danke im Voraus.

Antwort

2

Wenn Sie im Test eine Referenz auf den WCF-Dienst hinzufügen, indem Sie "Dienstverweis hinzufügen" verwenden, können Sie den Standardauflistungstyp für den generierten Proxy auf dem Client konfigurieren. Der Standard, den ich denke, ist Array, Sie können ihn in eine generische Liste ändern.

Wenn Sie Svcutil verwenden, erlaubt das auch das gleiche.

8

Ich lief in diesen genauen Fehler, aber die angenommene Antwort war nicht ganz die Lösung, die ich brauchte. Es stellt sich heraus, dass der Client eine List<Order> an meine WCF-Dienst gesendet wurde, aber da die Customer.Orders Eigenschaft als ICollection<Order> definiert wurde, Deserialisierung des Deserializer WCS deserialisiert es in der einfachsten Form konnte es, die ein Array des Typs Auftrag war, dh , Order[].

Die einzige Lösung, die ich mir vorstellen konnte, war, die betreffende Eigenschaft an meinen POCO-Objekten von ICollection<Order> zu HashSet<Order> zu ändern. Weitere Details finden Sie unter Stop WCF Deserializing Empty ICollection into Zero Capacity Array.

0

Seltsam. Ich hatte denselben Fehler und tat das Richtige, rief "ToArray()". In "ToList()" geändert und es hat gut funktioniert.

+0

Pfffff .... Ich landete hier nach googlen diesen Fehler. Fand diese Antwort und es funktionierte ein Vergnügen. Ging es als die richtige Antwort abstimmen, nur um zu erkennen, dass es vor zwei Jahren von mir gepostet wurde! Ich vermute, dass ich hier gelandet bin und dann denselben Fehler im selben Projekt gegoogelt habe. – Maxcelcat