Использование Entity Framework с историческими данными - PullRequest
12 голосов
/ 06 июля 2011

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

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

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

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

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

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

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

1 Ответ

10 голосов
/ 06 июля 2011

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

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

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

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

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

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

...