WCF保存EF 4.1项目抛出异常无法将项目添加到固定大小的类型数组中

时间:2012-04-07 13:58:23

标签: wcf entity-framework-4 dbcontext savechanges

我搜索了谷歌并且花了很多时间来试图弄清楚我的WCF和客户端Windows窗体应用程序发生了什么。

我不断收到以下错误

"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)

我配置我的解决方案的方式我有一个引用我的DataLayer类库的WCF Web服务,我有一个Windows应用程序(测试应用程序),它引用了WCF服务以及DataLayer项目。

如果我在我的测试应用中没有引用DataLayer,则不会出现此问题,但是我丢失了ICollection<Ingredient>到简单Ingredient[]数组。现在你可以看到,每次初始化数组都会成为编码的痛苦。

任何人都有意见吗?提前致谢。

3 个答案:

答案 0 :(得分:8)

我遇到了这个确切的错误,但接受的答案并不是我需要的解决方案。事实证明,客户端正在向我的WCF服务发送List<Order>,但由于Customer.Orders属性被定义为ICollection<Order>,因此WCF反序列化器反序列化器只是以最简单的形式对其进行反序列化它可以,这是一个Order类型的数组,即Order[]

我能够提出的唯一解决方案是将我的POCO对象上的属性从ICollection<Order>更改为HashSet<Order>。有关详细信息,请参阅Stop WCF Deserializing Empty ICollection into Zero Capacity Array

答案 1 :(得分:2)

使用“添加服务引用”在测试中添加对WCF服务的引用时,可以选择在客户端上为生成代理配置默认集合类型。我认为默认是数组,您可以将其更改为通用列表。

如果您使用svcutil,那也允许相同的事情。

答案 2 :(得分:0)

怪异。我有同样的错误,正在做正确的事情,调用“ToArray()”。将其更改为“ToList()”,它开始正常工作。