我有这样的事情:
public override int SaveChanges()
{
foreach (var changeLog in this.ChangeTracker.Entries()
.Where(p => p.State == EntityState.Added ||
p.State == EntityState.Deleted ||
p.State == EntityState.Modified)
.SelectMany(entity => AuditRecords(entity)))
{
this.ChangeLogs.Add(changeLog);
}
return base.SaveChanges();
}
但是,当然,添加EntityState时(直到SaveChanges之后),审核的更改日志将不包含实体的主键值。如何获得用于变更审核的主键值?
理查德
最佳答案
我将对实体的引用存储在 List<T>
(或数组,或其他此类结构)中,然后调用SaveChanges
的基础实现。
调用完成后,由于您的实体是引用类型(最佳实践表明它们应该是可变的),因此应填充列表中那些项的主键,此时您可以将已更改的实体列表传递给您的审计层。
同样,您似乎正在尝试添加一种实体类型的实体,并将其添加到另一种实体类型集合中(无论ChangeLogs
公开什么);我建议不要这样做。如果要在另一个实体集中输入项目,请不要重复使用这些实体,而要将实例复制到正确的实体类型。
关于.net - DbContext ChangeTracker : Id of Added Entity for Auditing,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9694696/