C # Entity Framework ленивая загрузка, если не отключен - PullRequest
2 голосов
/ 28 мая 2011

Я пытаюсь выполнить какой-либо процесс для каждого объекта в моем EntityFramework OnSave. Часть этого процесса включает в себя превращение объекта в двоичный объект. Для сериализации требуется FOREVER, и я на 99% уверен, что это потому, что мы используем Lazy Loading для нашей EntityFramework и он захватывает объекты Lazy Loaded, к которым осуществляется доступ в PartialClasses.

Я пытался отсоединить свой объект от ObjectContext, но мои коллеги использовали Ленивую загрузку по всему нашему приложению без предварительной проверки, был ли объект НЕДЕЙСТВИТЕЛЕН.

Например, в нашем файле частичных классов есть такой код:
get { return this.ContactsTable.FullName; }
Это прекрасно работает, пока объект не отделен. Как только он отсоединяется, я получаю нулевые ошибки ссылки.

У меня такой вопрос: могу ли я отсоединить свой объект и сделать так, чтобы Lazy Loading не выбрасывал исключения Null Reference, или я могу сказать DataContractSerializer игнорировать объекты Lazy Loaded?

1 Ответ

4 голосов
/ 28 мая 2011

Могу ли я отстранить объект и ленивый груз не бросай Null Reference исключения

номер

могу ли я сказать DataContractSerializer игнорировать Ленивый Загруженные объекты

Количество

Но должно быть простое решение. Когда вы собираетесь сериализовать объект, вызовите его в контексте, в котором объект присоединен:

// Turn off the lazy loading
context.ContextOptions.LazyLoadingEnabled = false;
// Run your serialization here
...
// Turn on the lazy loading again
context.ContextOptions.LazyLoadingEnabled = true;

Но это очень странно, потому что сериализация будет пытаться сериализовать все загруженные сущности, и, по вашему описанию, вы никогда не знаете, как будет сериализована большая часть графа объектов.

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

...