Entity Framework и DataContractSerializer - PullRequest
       21

Entity Framework и DataContractSerializer

3 голосов
/ 12 августа 2011

Я читал о сериализации графа сущностей в контексте инфраструктуры сущностей с использованием Linq для сущностей и различных возможных сериализаторов: Binary, XmlSerializer и DataContractSerializer. Как я понял, двоичный файл и XmlSerializer сериализуют сущность без ее взаимосвязей. В случае сериализации отношений это вызовет проблему из-за характера получающейся структуры файла xml (для XmlSerializer). DataContractSerializer сериализует график по всей его глубине, если не отключена отложенная загрузка.

Мой вопрос : я хочу сериализовать часть графика. Например, если у меня есть объект A и три связанных объекта B, C и D, только B и D будут сериализованы с A. Я хочу использовать DataContractSerializer. Если я удалю [DataMemberAttribute] нежелательных навигационных свойств, это сработает?

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Вы можете фактически отключить отложенную загрузку, сериализацию / десериализацию, а затем снова включить отложенную загрузку.

context.ContextOptions.LazyLoadingEnabled = false;

Источник StackOverflow

0 голосов
/ 18 января 2014

По моему опыту, единственный надежный способ отключить ленивую загрузку - это перейти в моталку Entity Designer, щелкнуть правой кнопкой мыши в фоновом режиме, выбрать «Свойства» и установить для «Ленивая загрузка включена» значение false в окно свойств.

0 голосов
/ 12 августа 2011

Поскольку атрибуты являются статическими метаданными, вы не можете связываться с ними во время выполнения.И если вы удалите их из вашей сущности, они будут удалены навсегда.

Ленивая загрузка, вероятно, не то, что вам нужно, так как при загрузке вы переносите весь график, частичный кенарий графика обычно появляется толькоОбновления или частичные вставки.

Ваш кенарио, из того, что я собрал, это когда вы хотите обновить что-то, вы хотите обновить только частичный график, а не весь график, который у вас есть на клиенте.Один из способов добиться этого - вручную удалить другие DataMembers и установить для них значение null, сериализовать их, обновить и восстановить восстановленные ранее нулевые ссылки. Наконец, убедитесь, что все ChangeTrackers находятся в своем предыдущем состоянии.

В нашем конкретном разработанном сценарии мы достигли этого поведения с помощью шаблона T4, который генерирует весь грязный код, генерируя часть «DataManager», который обрабатывает все объекты самообследования, как только они существуют на клиенте.

...