FixupCollection, которая назначена вашему ICollection, воссоздается как массив, когда происходит десериализация. Вот почему ваша коллекция продуктов доступна только для чтения.
Чтобы изменить это, вы можете использовать опцию (существующую по крайней мере на VS2010) в «Добавить ссылку на службу», чтобы изменить тип коллекции на что-то другое (Generic.List или Generic.Observable).
Но если вы используете опцию для повторного использования типа, существующего в существующей сборке, и для ссылки на сборку, содержащую вашу сущность, предыдущая опция не будет применена к существующему типу, и у вас все еще будет массив в вашей коллекции продуктов.
Обходное решение, которое я использую (только если вы повторно используете тип на стороне клиента и ссылаетесь на сборку сущностей), - это изменить шаблон T4, чтобы проверить, доступна ли коллекция только для чтения при получении продуктов, и установить FixupCollection, если это так. :
if (<#=code.FieldName(navProperty)#>.IsReadOnly)
{
var newCollection = new FixupCollection<<#=code.Escape(navProperty.ToEndMember.GetEntityType())#>>(<#=code.FieldName(navProperty)#>);
newCollection.CollectionChanged += Fixup<#=navProperty.Name#>;
<#=code.FieldName(navProperty)#> = newCollection;
}