将Entity Framework与历史数据结合使用

时间:2011-07-06 16:01:02

标签: .net entity-framework entity-framework-4 entity-relationship

我正在.Net 4.0中构建一个Windows应用程序来创建和组织电子项目。该应用程序的主要目的是记录电子组件的供应商信息(部件号,描述,价格等),并将它们组织(关联)到项目(成品)中。其中一项要求是跟踪任何给定供应商项目(主要是价格)的变化以及项目级别的变更,以便在组件级别和项目级别详细信息中提供变更的时间点统计信息。

鉴于客户端部署的简单性,我决定将Entity Framework 4用于我的数据访问层,使用SQL CE 3.5作为数据库。数据访问很有用,但是当尝试创建对象之间的关系(关联)时,框架似乎没有任何明显的方法来使用历史数据。这是我第一次尝试使用实体框架,所以我认为这可能只是我的经验不足以阻止我找到答案。这是我的基本架构:

我有3个主要表:Project,Product和ProjectProduct

Project和Product表每个都有一个ID列和一个DateAdded列,用作复杂键。 ProjectProducts表具有其他两个表中每个表的ID,并维护实体之间的多对多关系。关系表还有一个DateAdded列,用于跟踪产品/项目关联中的更改。

虽然实体框架似乎在维护使用标准代码生成的数据对象的直接关联(无日期标准)方面效果很好,但是如何让它加载点的关联有点令人困惑。时间历史数据模式。基本上我需要能够根据时间点要求(参数化加载)的日期标准加载数据对象。

有没有人做过类似的事情,可以指出我正确的方向?

很抱歉有很长的解释,但请提前感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:10)

我实现了完全相同的事情。使用EF4非常简单。您基本上处理OnSavingChanges事件,并枚举更改的项目集,并根据需要存储它们。

唯一的问题是,插入项目非常棘手(除非您没有新项目的主键,我不是这样)我决定只跟踪更新和删除。

本文向您展示了如何执行此操作,尽管我的实现更简单(我不喜欢在XML中存储更改,因此我为列创建了一个单独的表)

Implementing Audit Trail using Entity Framework - Part 1

第2部分展示了如何进行回滚,如果你对此感兴趣的话。

Implementing Audit Trail using Entity Framework - Part 2