2

Я пытаюсь выяснить, как кэшировать результаты запроса EF в кеше Azure AppFabric. В настоящее время я использую расширения LoreSoft EntityFramework для работы с кешированием (http://bit.ly/LWSywm). Он отлично работает с кешем памяти, но не так много с AppFabric для нескольких виртуальных машин. Проблема в том, что у меня есть виртуальные свойства в моих объектах EF, и они сериализуются как объекты Dynamic Proxy, которые, конечно же, нельзя десериализовать на другой виртуальной машине или даже после того, как одна VM перезапустит приложение.Кэширование Entity Framework приводит к Azure AppFabric

У меня есть только несколько запросов, которые мне нужно кэшировать, поэтому я не хочу загружать каждый отдельный связанный объект вручную по всему проекту. Можно ли каким-либо образом сериализовать объект EF с виртуальными свойствами? Мне не нужны виртуальные свойства, чтобы волшебным образом начать ленивую загрузку снова после того, как я их десериализую. Я попытался отключить ленивую загрузку DbContext перед сериализацией результатов, но это не работает. Единственный способ найти сериализуемый объект EF - удалить все виртуальные свойства.

Кстати, я смотрел на статью Джули Лерман здесь: http://bit.ly/LWToZT

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

Любые идеи с оценкой!

ответ

4

Вы можете настроить свой dbcontext (или контекст объекта), чтобы не использовать прокси-объекты. Очевидно, это означает отсутствие отслеживания изменений и отсутствие ленивой загрузки. Если вы не хотите загружать свойства навигации объекта, они будут просто нулевыми, а не ссылками на прокси. Стоит отметить, что вы можете включать и выключать это в течение всего жизненного цикла, так что это решение не все или ничего.

Если вы используете DbContext, синтаксис:

context.Configuration.ProxyCreationEnabled = false; 
+0

Именно то, что я искал, спасибо! – ManicBlowfish

1

У нас была аналогичная проблема. У нас была служба, которая возвращала данные, которые были прочитаны из базы данных с использованием EF. Эти данные необходимо кэшировать в Appfabric.

В нашем случае сервисы возвращали объекты DTO, поэтому мы отображали объекты EF объектам DTO, а затем сохраняли объекты DTO в кэше Appfabric.