ADO.NET实体中的公共列

时间:2009-03-16 21:48:17

标签: entity-framework .net-3.5 inheritance

使用EDMX设计器时,有没有办法将各种表中的公共列提取到ADO.NET实体框架中的单个基类中?例如,我的数据库中的每个表都有一个“LastUpdatedBy”和“LastUpdatedDate”列,这是审计目的所必需的。我想在生成的ObjectContext中的“SavingChanges”事件中自动设置这些值,而不会转换为单个实体类型。请参阅此How to: Execute Business Logic When Saving Changes (Entity Framework)的示例。您可以在示例中看到它们如何转换为实体以访问各种属性。我希望能够只对基类型一次(如果是那种类型)并设置属性。

3 个答案:

答案 0 :(得分:0)

我恐怕可能没有 - 据我所知,EDMX设计器将为每个表/实体生成一个(尽管是部分的)类,并且你不能真正“注入”任何公共基表到混合

您可以调查的可能是将您的公共数据放入接口(ICommonData),然后让类实现该接口。

不确定如何将该接口注入EDMX设计器的过程中: - (

马克

答案 1 :(得分:0)

看看this article。它适用于LINQ to SQL,但可以很容易地按照this article的方式适应EF。第一个处理您的场景,其中所有表都具有所需的审计列,第二个处理使用单个审计表作为整个数据库,并实际为每个更改保留旧值和新值。

我陷入了两者之间,因为第二种方法无法识别新添加的记录,但第一种方法没有更改历史记录。让我在一个应用程序中实现两个审计策略感到不舒服,我需要一个CreatedOn值,所以我必须至少使用第一种方法。

顺便说一下,如果你像我一样,发现XML序列化是一种存储对象状态历史的笨拙方式,你可以看一下使用AuditValues详细信息表来存储已更改属性的旧值和新值的EF specific solution ,但这个根本不审核插入。

答案 2 :(得分:0)

它执行审计插入 - 但阅读第1部分以了解为什么我以稍微从后到前的方式执行此操作(我明白为什么你说它没有...而且它没有插入“插入”审计记录,但审计跟踪仍然存在);

http://blogs.msdn.com/b/simonince/archive/2009/04/20/auditing-data-changes-in-the-entity-framework-part-1.aspx

西蒙