【问题标题】:how to audit log inserts (adds) of records using tracker enabled dbcontext如何使用启用跟踪器的 dbcontext 审核记录的日志插入(添加)
【发布时间】:2017-03-15 02:57:30
【问题描述】:

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

创建更改的审计跟踪。我们还想将插入记录到新记录的跟踪中。我们可以遍历刚刚添加的实体,但似乎无法获取刚刚添加的实体的 ID?

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

但也有一些 cmets 建议有办法。我们研究了这些和相关的代码,但没有更清楚,真的可以用这个框架正确审计插入吗?

  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..
  }

【问题讨论】:

    标签: entity-framework audit-trail


    【解决方案1】:

    是的,可以为刚刚添加的实体插入 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)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 2019-12-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2011-03-18
      • 1970-01-01
      • 2015-03-16
      相关资源
      最近更新 更多