2016-11-01 43 views
0

使我们使用https://github.com/bilal-fazlani/tracker-enabled-dbcontext的使用跟踪记录如何审核日志插入(增加)的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.. 
    } 

回答

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) 
    { 
    } 
}