ORM с хорошей поддержкой для продолжительного контекста - PullRequest
1 голос
/ 21 мая 2009

Смежный вопрос здесь .

В большинстве ORM, когда вы запускаете запрос к существующему контексту, он не возвращает данные, которые были изменены, так как объекты были впервые возвращены из базы данных. Он выдает запрос к БД, но любые изменения, внесенные в БД, не возвращаются, потому что контекст не хочет топать ваши объекты (обсуждение этого поведения в Linq to SQL смотрите здесь ) , Это хорошо для краткосрочных контекстов, использующих шаблон «Единица работы», но не так хорошо, если вы используете долгоживущие контексты.

Я пробовал Linq to SQL и Entity Framework, обе платформы предоставляют метод обновления, который позволяет вам указать аргумент enum для перезаписи существующего объекта в контексте, но это не будет поднимать новые записи (по крайней мере, без дополнительного запроса ) и, что более важно, не удалит объекты для записей, которые были удалены из БД.

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

Существует ли ORM, который может обновлять объекты самыми последними данными для БД, добавлять объекты для вновь создаваемых объектов и удалять объекты для записей, которые были удалены из БД, в идеале эффективным способом (т. Е. Используя Столбцы версии MS SQL).

Ответы [ 2 ]

1 голос
/ 25 мая 2009

Я не уверен, но, похоже, вам нужно что-то похожее на поведение DataObjects.Net. Их сущности являются долгоживущими объектами, привязанными к сеансу, которые хранят данные в состоянии транзакции. Когда вы открываете новую транзакцию и читаете постоянное свойство существующих объектов, они автоматически извлекают его из базы данных (это также касается свойств EntitySet).

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

0 голосов
/ 22 мая 2009

Проверьте это ORM: "http://entityorm.uuuq.com"

У вас на сайте:

  • Базовый пример, как это работает;
  • Полная документация и пример в pdf руководстве;
  • Форум *; 1011 *
  • Поддерживаемые БД (неограниченно, потому что вы можете создавать свои драйверы).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...