2011-10-17 127 views
0

我有一个使用EF4的Web应用程序。我有点新的EF和现在正在努力实施变革Audit.I试图通过捕获上下文类的SavingChanges事件如下实体框架4更改审计

partial void OnContextCreated() 
     { 
      this.SavingChanges += new EventHandler(TicketContainer_SavingChanges); 

     } 

因此事件处理程序可通过以下

访问已变更记录要做到这一点
this.ObjectStateManager.GetObjectStateEntries(
      EntityState.Added | EntityState.Modified); 

这工作正常,我正在创建所选表的列级审计。每个表/实体都有一个ID字段,它是具有columnName =“ID”的标识符。因此,在我的审计例程中,我只是通过名称为“Id”的列访问数据以获取审计记录的ID。

我面临的问题是在插入过程中。新记录没有ID,因为它是数据库中的标识列,并且始终为0.

我能想到的一种解决方案是对所有Ids使用GUID.But是否有一种方法可以使用标准的int32标识IDS?

感谢

回答

0

我不,我们现在有多少实体但是你只有在我们自己实施跟踪审计的创建为每个实体具体审核的实体,所以我们可以将它们关联起来低谷的导航性能,让数据库集身份密钥。

如果您为审计实体使用继承,则可以轻松查询它们。

希望这有助于:)

+0

嗨Wouter感谢您的答复。我没有完全理解你的建议。但可能你正在创建一个Fkey从审计表到你的实际表,因为你有1审计表每个实体。但在我的情况下,我只有一个跨所有实体的单一审计表 – josephj1989

+0

为什么您仅限于一个表?如果使用TablePerHierarchy继承,则仍然可以将整个继承层次结构放在表上。例如,您将具有带有TargetPerson属性和TargetPersonId(FK)的PersonAudit类型以及具有属性TargetOrder和TargetOrderId的OrderAudit –

0

插入时不生成标识列。插入数据后,只有您可以在EF中获取标识列数据。所以,你可以尝试一些解决方法,在插入后获取Id,然后用该Id填充审计表。