如何在SaveChanges

时间:2018-04-14 01:15:44

标签: entity-framework entity-framework-core

我想记录新的和修改过的记录。此代码适用于修改记录。

但是有了添加记录,就会出现问题。由于它是数据库的新功能,因此还没有主键。所以没有办法记录添加了哪条记录。

但是,如果我尝试在保存后记录记录,则不再添加EntityState。所以我不知道添加了什么。

我能够提出的唯一解决方案是保存新记录列表,然后在保存之后,然后记录更改。但这似乎是一种解决方法。

有什么方法可以解决这个问题吗?

 private List<Event> LogChanges(EntityEntry entityEntry, Enums.TableNames tableName)
    {
        List<Event> result = new List<Event>();
        var databaseValues = entityEntry.GetDatabaseValues();
        foreach (var property in entityEntry.CurrentValues.Properties.Where(a=> a.Name !="TenantId"))
        {
            string original = databaseValues[property]?.ToString();
            string current = entityEntry.CurrentValues[property]?.ToString();

            if(!object.Equals(original,current))
            {
                result.Add(
                    new Event()
                    {
                        AppUserId = this._appUserProvider.CurrentAppUserId,
                        EventDate = DateTimeOffset.UtcNow,
                        EventTypeId = (int)Enums.EventTypes.Modified,
                        TenantId = databaseValues.GetValue<int>("TenantId"),
                        RecordId = databaseValues.GetValue<int>("Id"),
                        ColumnName = property.Name,
                        OriginalValue = original,
                        NewValue = current,
                        TableId = (int)tableName
                    });
            }
        }

        return result;

    }

1 个答案:

答案 0 :(得分:0)

This library为EntityFrameworkCore添加了触发器。使用它提供的触发器是一种更简洁的方法来实现上述目的。