【问题标题】:WCF Saving EF 4.1 item throws exception An item cannot be added to a fixed size Array of typeWCF 保存 EF 4.1 项目引发异常无法将项目添加到固定大小的类型数组
【发布时间】:2014-06-16 10:35:00
【问题描述】:

我已经搜索了 google 并花费了相当多的时间试图弄清楚我的 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 服务,我有一个引用 WCF 服务以及 DataLayer 项目的 Windows 应用程序(测试应用程序)。

如果我不在我的测试应用程序中引用 DataLayer,则不会发生此问题,但是我将 ICollection&lt;Ingredient&gt; 丢失为简单的 Ingredient[] 数组。现在你可以看到,每次初始化数组都变成了编码的痛苦。

有人知道吗?提前致谢。

【问题讨论】:

    标签: wcf entity-framework-4 dbcontext savechanges


    【解决方案1】:

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

    我能想出的唯一解决方案是将我的 POCO 对象的相关属性从 ICollection&lt;Order&gt; 更改为 HashSet&lt;Order&gt;。有关更多详细信息,请参阅Stop WCF Deserializing Empty ICollection into Zero Capacity Array

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        很奇怪。我遇到了同样的错误,并且正在做正确的事情,调用“ToArray()”。将其更改为“ToList()”并开始正常工作。

        【讨论】:

        • Pfffff.... 在谷歌搜索此错误后,我最终来到了这里。找到了这个答案,它奏效了。去投票作为正确答案,才意识到它是我两年前发布的!我怀疑我最终来到了这里,然后在同一个项目中搜索了同样的错误。
        猜你喜欢
        • 2012-04-07
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多