Entity Framework v1 и кэшированное обновление POCO - PullRequest
0 голосов
/ 06 мая 2011

Я использую EF v1 и Velocity cache в своем приложении .NET 3.5.Мои кэшированные объекты являются представлением модели Entity в базе данных.Поэтому я решил использовать EF v1 с адаптерами POCO.Таким образом, существует слой доступа к объектам, который считывает объект из кэша и, если его нет, читает его из базы данных и немедленно кэширует его.Теперь в случае использования, где требуется обновление, грязная POCO должна быть обновлена ​​в базе данных.Теперь я не могу напрямую использовать адаптеры и прокси-серверы POCO, поскольку им нужны объекты поддержки, которые отслеживают изменения.Я никогда не увлажнял объект адаптера из каркаса, поэтому обнаружение изменений не происходит.Самый простой вариант, который я вижу, это:

  1. Считать объект перед обновлением.Установите значения адаптера из POCO.Пусть обнаружение изменений пройдет своим чередом.Это делает выбор перед каждым обновлением, которое может быть дорогостоящим, учитывая множество связанных объектов.
  2. Создать новый объект Entity.Установите ключ сущности и свойства из POCO.Сохранить изменения.Это делает ненужные записи, даже если свойство / связанный объект не были изменены.

Надеюсь, я ясно сформулировал проблему.Пожалуйста, предложите.

1 Ответ

0 голосов
/ 09 августа 2011

На самом деле получается 1. и 2. одинаковы. Вам необходимо полностью прочитать сущность (вместе с ассоциациями), чтобы убедиться, что изменения в вашем отдельном объекте транслируются в контекст сущности. Предостережения этого подхода: 1. Прочитайте перед обновлением 2. Устаревшие записи (поскольку все свойства отсоединенного объекта обновляются, мы могли бы в конечном итоге обновить значение сшивателя, поскольку мы не изменили то, что действительно изменили)

Я не думаю, что есть какой-то способ избежать 1. Но если 2. критичен для ваших бизнес-требований (то есть вы не можете позволить себе перезаписать устаревшие значения, отследить поля, которые вы меняете с помощью «IsChangedProperty», и обновлять только те, Это очень болезненно, но, к сожалению, с отсоединенными объектами ни EF v4, ни v1 не дают вам передышки: (

...