Использование Entity Framework с историческими данными

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

Я решил использовать Entity Framework 4 для моего уровня доступа к данным с SQL CE 3.5 для базы данных, учитывая простоту развертывания клиента. Доступ к данным работает отлично, но при попытке создания отношений (ассоциаций) между объектами структура не имеет очевидного способа использования исторических данных. Это моя первая попытка использовать структуру сущности, поэтому я решил, что это может быть просто моя неопытность, которая мешает мне найти ответ. Вот моя основная схема:

У меня есть 3 основных таблицы: Project, Product и ProjectProduct

В каждой таблице Project и Product есть столбец идентификатора и столбец DateAdded, которые используются в качестве сложного ключа. Таблица ProjectProducts имеет идентификаторы для каждой из двух других таблиц и поддерживает отношения "многие ко многим" между объектами. Таблица отношений также имеет столбец DateAdded для отслеживания изменений в ассоциациях продуктов/проектов.

В то время как Entity Framework, похоже, отлично работает с поддержанием ассоциаций, которые являются прямыми (без критериев даты) с использованием стандартных объектов данных, генерируемых кодом, немного запутывают, как заставить его загружать ассоциации для точечного ввода, временной исторической схемы данных. По существу мне нужно иметь возможность загружать объекты данных на основе критериев даты для требований времени (параметризованная загрузка).

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

Извините за длинное объяснение, но заблаговременно за любую помощь, которую вы можете предоставить!

Ответ 1

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

Единственная проблема заключается в том, что ОЧЕНЬ сложно получить вставленные элементы (если только вы не уверены, что у вас нет Первичного ключа нового элемента, которого я не был), я решил отслеживать только обновления и удаления.

В этой статье показано, как это сделать, хотя моя реализация была намного проще (мне не нравилось сохранять изменения в XML, поэтому я сделал отдельную таблицу для столбцов)

Реализация аудита с использованием Entity Framework - Часть 1

часть 2 показывает, как делать откаты, если вы заинтересованы в этом.

Реализация аудита с использованием Entity Framework - Часть 2