3

我已经搜索了谷歌并用尽了相当多的时间试图弄清楚我的 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<Ingredient>简单Ingredient[]数组。现在你可以看到,每次初始化数组都变成了编码的痛苦。

有人知道吗?提前致谢。

4

3 回答 3

8

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

我能想出的唯一解决方案是将我的 POCO 对象上的相关属性从 anICollection<Order>更改为 a HashSet<Order>。有关更多详细信息,请参阅停止 WCF 将空 ICollection 反序列化为零容量数组

于 2012-06-01T08:39:54.210 回答
2

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

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

于 2012-04-07T15:47:36.463 回答
0

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

于 2014-06-16T02:35:00.027 回答