如何使用启用跟踪器的dbcontext审核记录的日志插入(添加)

时间:2016-11-01 21:37:43

标签: entity-framework audit-trail

我们正在使用https://github.com/bilal-fazlani/tracker-enabled-dbcontext

创建更改的审计跟踪。我们还想将插入记录到新记录的轨迹中。我们可以循环通过刚添加的实体,但似乎没有办法获得刚刚添加的实体的ID?

一年前有一篇文章写道,这是一个限制/不可能 - https://www.exceptionnotfound.net/entity-change-tracking-using-dbcontext-in-entity-framework-6/

但也有一些评论表明有一种方法。我们研究了那些和相关的代码但是没有更清楚,是否有可能使用这个框架正确地审计插入?

  foreach (var entryAdded in addedEntities)
  {

     var entityKeyObject = objectContext.ObjectStateManager.GetObjectStateEntry(entryAdded.Entity).EntityKey;
     var entityKey = entityKeyObject.EntityKeyValues.Length >= 1 ? entityKeyObject.EntityKeyValues[0].Value : 0;

     // insert into audit log here..
  }

1 个答案:

答案 0 :(得分:0)

是的,可以为刚添加的实体插入ID。

简而言之,您只需要处理两个事件:

可以使用链接找到所有代码。所以我无法回答如何使用这个库,但至少,我可以确保你100%可能。

另一种方法是使用另一个Entity Framework Audit Library

免责声明:我是该项目的所有者Entity Framework Plus

维基:EF+ Audit

此库允许您审核&将信息保存在数据库中。默认情况下,它已经支持添加ID。

// using Z.EntityFramework.Plus; // Don't forget to include this.

var ctx = new EntityContext();
// ... ctx changes ...

var audit = new Audit();
audit.CreatedBy = "ZZZ Projects"; // Optional
ctx.SaveChanges(audit);

// Access to all auditing information
var entries = audit.Entries;
foreach(var entry in entries)
{
    foreach(var property in entry.Properties)
    {
    }
}