#c# #asp.net-mvc-3 #entity-framework #entity-framework-4 #entity-framework-4.1
#c# #asp.net-mvc-3 #entity-framework #entity-framework-4 #entity-framework-4.1
Вопрос:
У меня есть сайт MVC3 с EF4.1 и шаблоном репозитория / единицы работы и создание нового контекста для каждого http-запроса.
Я хочу реализовать кэширование пользовательских объектов в Entity Framework 4.1. Это означает добавление объекта в asp.net кэширование для более быстрого извлечения с помощью других подобных HTTP-запросов.
Но проблема с EF заключается в том, что эти кэшированные объекты привязаны к контексту, который использовался для извлечения этого объекта в первую очередь и который был удален после завершения этого http-запроса.
Теперь, когда я хочу обновить этот кэшированный объект, он выдает мне «На объект сущности не могут ссылаться несколько экземпляров IEntityChangeTracker», что имеет полный смысл.
Какова наилучшая практика для реализации кэширования объектов в MVC3 / EF4.1?
Я предполагаю, что вам нужно отделить объект от старого контекста при добавлении в кеш и присоединении к новому контексту при извлечении. Но я, конечно, не первый, кто сталкивается с этим или пытается это реализовать!
Существуют ли какие-либо помощники или библиотеки? (пожалуйста, не указывайте мне на http://code.msdn.microsoft.com/EFProviderWrappers/Release/ProjectReleases.aspx?ReleaseId=4747 поскольку это удаляет ВСЕ записи из кэша при любом обновлении таблицы, что оказывается бесполезным).
Спасибо.
Ответ №1:
«Наилучшей практикой», вероятно, было бы использовать специальный класс DTO для хранения в сеансе и сопоставления с этим классом и из него, когда вам нужно сохранить или загрузить информацию в базу данных.
Однако вы должны быть в состоянии достичь того, к чему стремитесь, просто отсоединив и присоединив объект, как вы говорите. Это не должно быть так сложно, если вы объедините свою логику для добавления и удаления его из сеанса в один класс.