none
Ошибка при передаче объекта Entity вместе с отношением через WCF RRS feed

  • Вопрос

  • На WCF сервисе есть сгенерированный Entity объект с отношением на себя (Department с идентификатором родительского подразделения ParentDepartmentID).
    Клиенту объект от сервиса доходит хорошо, а вот обратно на сервис уйти не может.

    Unhandled Exception: System.InvalidOperationException: The EntityReference object could not be serialized.
    This type of object cannot be serialized when the RelationshipManager belongs to an entity
    object that does not implement IEntityWithRelationships.
    
    Сгенерированный на основе данных сервиса объект Department' на клиенте как и его основа на сервисе Department содержит аттрибут ParentDepartmentReference - отношение.


    Если этому атрибуту передо отправкой на сервис присвоить null, то объект сериализуется, иначе описанная выше ошибка.

    С сервиса на клиент объект передаётся без проблем.

    Если кто то встречался с такой проблемой прошу поделится. В интернете по ней довольно скудно написано.

     

    24 декабря 2010 г. 3:19

Ответы

  • Вы смотрели вопрос на английском форуме с подобной проблемой - The EntityReference object could not be serialized ?


    Для связи [mail]
    • Помечено в качестве ответа Хорев Иван 24 декабря 2010 г. 10:23
    24 декабря 2010 г. 6:25
  • Решение собственно в ссылке в третьем сообщении.

    Описание ошибки:

    Возникает при передачи Entity объекта (сгенерированный proxy объект) с клиента на сервер (возврат обратно). Так же объект должен иметь сгенерированные свойства класса типа <Название свойства>Reference - то есть отношения.

    Исключение вызываемое при сериализации объекта:

    Unhandled Exception: System.InvalidOperationException: The EntityReference object could not be serialized.
    This type of object cannot be serialized when the RelationshipManager belongs to an entity
    object that does not implement IEntityWithRelationships.

    Решение:

    1 Необходимо пересоздать Service Reference, для этого:

    1.1 Сохряняем копию конфига, так как он изменится :\

    1.2 Удаляем proxy классы службы

    1.3 Открываем диалог заведения нового proxy службы

    1.4 Находим службу, вводим имя как у удалённого proxy

    1.5 Заходим в Advanced, переключаемся на Reuse types in specified...

    1.6 Выделяем все сборки кроме System.Data.Entity

    1.7 Генерируем proxy классы службы

    Не забываем проверить конфиг, так как он изменён

    В общем вот такое решение :\

    Для обновления сервиса бубен не нужен, настройка наша сохранится

    • Помечено в качестве ответа Хорев Иван 24 декабря 2010 г. 10:23
    24 декабря 2010 г. 10:23

Все ответы

  • Выяснил, что это проблема четвёртого фреймворка. На три с половиной у коллеги тот же код всё заработал.

    Но проблема всё ещё стоит остро!

    24 декабря 2010 г. 5:21
  • Вы смотрели вопрос на английском форуме с подобной проблемой - The EntityReference object could not be serialized ?


    Для связи [mail]
    • Помечено в качестве ответа Хорев Иван 24 декабря 2010 г. 10:23
    24 декабря 2010 г. 6:25
  • Конечно, смотрел, это первое (и единственное существенное), что выдаёт поиск. К сожалению я не смог нормально осмыслить приведённый там ответ  (слишком тяжёлый для меня английский  текст).

    24 декабря 2010 г. 7:30
  • Как я понимаю, в диалоге настройки ссылок сервиса (в solution explorer, в service references правой кнопкой по сервису и configure service reference...) он убрал выбор System.Data.Entity.dll в повторном использовании (reuse types in specified referenced assemblies)
    Для связи [mail]
    24 декабря 2010 г. 8:05
  • Да именно так, сейчас у моего коллеги с подобной ошибкой проблема решена именно таким способом. Скоро и я буду пробовать. По результату обязательно опишу решение.
    24 декабря 2010 г. 8:33
  • Решение собственно в ссылке в третьем сообщении.

    Описание ошибки:

    Возникает при передачи Entity объекта (сгенерированный proxy объект) с клиента на сервер (возврат обратно). Так же объект должен иметь сгенерированные свойства класса типа <Название свойства>Reference - то есть отношения.

    Исключение вызываемое при сериализации объекта:

    Unhandled Exception: System.InvalidOperationException: The EntityReference object could not be serialized.
    This type of object cannot be serialized when the RelationshipManager belongs to an entity
    object that does not implement IEntityWithRelationships.

    Решение:

    1 Необходимо пересоздать Service Reference, для этого:

    1.1 Сохряняем копию конфига, так как он изменится :\

    1.2 Удаляем proxy классы службы

    1.3 Открываем диалог заведения нового proxy службы

    1.4 Находим службу, вводим имя как у удалённого proxy

    1.5 Заходим в Advanced, переключаемся на Reuse types in specified...

    1.6 Выделяем все сборки кроме System.Data.Entity

    1.7 Генерируем proxy классы службы

    Не забываем проверить конфиг, так как он изменён

    В общем вот такое решение :\

    Для обновления сервиса бубен не нужен, настройка наша сохранится

    • Помечено в качестве ответа Хорев Иван 24 декабря 2010 г. 10:23
    24 декабря 2010 г. 10:23