我有这样的事情:

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/

10-13 07:09