2010-08-17 7 views
4

У меня есть база данных с кучей ссылочных таблиц, таких как Штаты, Языки и т. Д. Я хотел бы иметь возможность кэшировать эти таблицы, а затем использовать эти типы в любом объекте ObjectContext, который я хочу. Таким образом, в псевдо-код, который я хочу, чтобы быть в состоянии сделать что-то вроде этогоКэширование объектов POCO в Entity Framework 4.0

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(); 

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

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

ответ

0

Публикация Алекса всячески важна для субъектов POCO как для не-POCOs. Почему вы думаете, что это не так?

+0

Вы правы действительно, но это не говоря уже о том, что вы можете получить исключение, если вы пытаетесь прикрепить клонированный объект в этом же контексте более чем один раз. Это то, что давало мне проблемы –

0

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

Is is possible to check if an object is already attached to a data context in Entity Framework?

Смежные вопросы