Кэширование объектов POCO в Entity Framework 4.0

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

var db1 = new PatientObjectContext();
Cache.CacheStates(db1.States.ToList())

var person = new Person { State = Cache.GetState("PA")} ;
var db2 = new PatientObjectContext();

db2.People.Add(person)
db2.SaveChanges();

Я видел это сообщение в блоге (https://blogs.msdn.microsoft.com/alexj/2009/04/22/tip-14-how-to-cache-entity-framework-reference-data/). Но это не относилось ко мне, потому что я думаю, что он не использует POCO. Когда я пытаюсь прикрепить кэшированный объект к objectContext, я получаю исключение, потому что объект с этим первичным ключом уже находится в этой коллекции состояний контекстов.

Кажется, что кеширование справочных таблиц должно быть довольно распространенной проблемой, но я не могу найти никаких прямых решений для этого.


person Vadim Rybak    schedule 17.08.2010    source источник


Ответы (2)


Пост Алекса так же актуален для организаций POCO, как и для не-POCO. Почему вы думаете, что это не так?

person Craig Stuntz    schedule 17.08.2010
comment
Вы правы, это действительно, но не упоминается, что вы можете получить исключение, если попытаетесь прикрепить клонированный объект к одному и тому же контексту более одного раза. Это то, что доставляло мне проблемы - person Vadim Rybak; 18.08.2010

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

Можно ли проверить, присоединен ли уже объект к контексту данных в Entity Framework?

person Vadim Rybak    schedule 18.08.2010