Кэширование объектов POCO в Entity Framework 4.0 - PullRequest
4 голосов
/ 18 августа 2010

У меня есть база данных с кучей справочных таблиц, таких как «Состояния», «Языки» и т. Д. Я хотел бы иметь возможность кэшировать эти таблицы и затем использовать эти типы в любом 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();

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

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

Ответы [ 2 ]

0 голосов
/ 18 августа 2010

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

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

0 голосов
/ 18 августа 2010

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

...