Хранение нескольких изменений в Entity Framework - PullRequest
0 голосов
/ 27 мая 2009

Я пытаюсь получить форму двухфазного принятия с использованием Entity Framework 1.0.

Что бы я хотел достичь на высоком уровне:

  1. получить все данные из базы данных и сохранить их в кеше.
  2. изменить отдельные объекты
  3. Передать все изменения в базу данных

Проблема, с которой я сталкивался до сих пор, заключается в том, что кэширование IQueryable немного бессмысленно, так как оно собирается вернуться к базе данных независимо от этого. Поэтому другой вариант - использовать IEnumberable для хранения результатов запроса, но это останавливает меня, унаследовав один запрос и уточнив его в другом (однако я могу с этим смириться). Другая проблема заключается в том, что как только истечет EntityContext (который мне удалось сохранить в текущем httprequest), все, изменения не могут быть отслежены.

Кто-нибудь пытался сделать что-то подобное в прошлом или получил указатели?

Большое спасибо, Matt

jumpingmattflash.co.uk

Ответы [ 2 ]

1 голос
/ 05 августа 2009

IQueryable - это просто запрашиваемый объект, а не фактические данные.

Вам нужно запустить ToList для вывода данных.

Вы можете делать то, что пытаетесь сделать, если можете оставить контекст открытым и использовать транзакции. Однако в большинстве случаев это невозможно. Это также заблокировало бы базу данных, ведущую к другим проблемам.

Лучший способ сделать это:

  • Считать данные из базы данных
  • Удалить контекст
  • Клиент вносит любые необходимые изменения
  • Открыть новый контекст
  • Считайте данные еще раз.
  • внести изменения путем копирования данных из измененных данных во второй набор
  • зафиксировать изменения
  • распоряжаться контекстом
0 голосов
/ 24 июля 2009

Звоните .ToList() на ваши IQueryable результаты из базы данных. Чтобы затем начать уточнение в других запросах, используйте .AsQueryable(). Это должно решить вашу первую проблему.

Что касается вашей второй проблемы, я также ищу решение. Как я понимаю, базовая реализация частей взаимосвязей Entity Framework вращается вокруг ObjectStateManager в пространстве имен System.Data.Objects сборки System.Data.Entity. Это, в свою очередь, использует класс MetadataWorkspace в пространстве имен System.Data.Metadata.Edm для поиска отображений отношений. Их можно было бы использовать без подключения к базе данных, и в этом случае можно было бы использовать очень удобные инструменты для обновления графов сложных объектов.

Было бы хорошо, если бы контекст имел отсоединение и присоединение аналогично отдельным сущностям. Похоже, что следующая версия Entity Framework будет сосредоточена на этих конкретных типах проблем; больше свободы при работе с сущностями и контекстами.

...