Сериализация сущностей linq-sql работает из коробки? - PullRequest
0 голосов
/ 22 сентября 2009

Если я попытаюсь сериализовать сущность linq-to-sql, будет ли она по умолчанию сериализовать только поля примитивов или попытаться также получить доступ к полям отношений? Если он пытается захватить поля отношений, есть ли способ переопределить это?

Ответы [ 2 ]

0 голосов
/ 26 июля 2013

Еще один момент, который нужно добавить к принятому ответу:

Отношения, которые не являются коллекциями, никогда не будут сериализованы DataContractSerializer (независимо от того, загружены они или нет), потому что для них не создается атрибут DataMember из файла .dbml.

Я нашел здесь объяснение тогдашнего сотрудника Microsoft Дэниела Симмонса:

Проблема здесь в том, что до SP1 не было хорошего способа сериализации DataContract для обработки графиков объектов, имеющих циклы. В результате для LINQ to SQL было принято компромиссное решение, чтобы позволить пользователям выбрать однонаправленную сериализацию и только сериализовать коллекции, а не ссылки. Этот механизм не работает в тех случаях, когда вы действительно хотите сериализовать ссылку (как, например, ваш сценарий выше), но он, по крайней мере, побуждает вас к некоторым распространенным сценариям.

В пакете обновления 1 (SP1) в WCF была добавлена ​​новая поддержка, которая позволяет сериализации DataContract иметь дело с циклами, но вы должны согласиться на это, изменив некоторые из своих атрибутов DataContract и, возможно, также внеся изменения в реализацию коллекций и ссылочных классов, чтобы правильно обрабатывать сериализацию и особенно десериализацию поведения WCF. В Entity Framework были внесены изменения, чтобы воспользоваться преимуществами этих новых функций, поскольку он еще не выпустил свою первую версию, но в Linq to SQL было только небольшое обновление пакета обновления в sp1, и он не был изменен, чтобы воспользоваться этим возможность.

Я не экспериментировал с этим на L2S, но возможно было бы сгенерировать ваши собственные классы, которые работают с L2S и имеют правильную поддержку сериализации WCF с циклами.

Danny

0 голосов
/ 23 сентября 2009

Какой сериализатор вы используете?

  • DataContractSerializer будет включать загруженные отношения, но не те, которые еще не загружены / null.
  • XmlSerializer имеет тенденцию задыхаться от отношений, если они являются двунаправленными (то есть сущность A указывает на сущность B, которая, в свою очередь, указывает назад).
  • Бинарный форматер ... Мне никогда не удавалось заставить его правильно работать с объектными объектами L2S, связанными с другими объектами. Хотя я давно пытался, так что, возможно, я просто сделал что-то не так ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...