在 Entity Framework 中更新实体时执行操作

Perform action when an entity is updated in Entity Framework

有没有办法在实体更新时运行编码?例如,我有一个实体在我的代码中的许多地方进行了更新。我希望能够在更新实体时随时更新 DateTimeUpdated 字段,而不更改更新该实体的每个函数。

这通常是通过覆盖 DbContext 中的 SaveChanges 方法来完成的。

首先为要跟踪 DateTimeUpdated 的可编辑实体引入基础 class 或通用接口:

public abstract class EditableEntityBase
{
    public DateTime DateTimeUpdated { get; internal set; } 
}

您要为其跟踪的实体应扩展此 class 或实施将公开 属性.

的合同接口

然后在您的 DbContext 中,覆盖 SaveChanges 方法并插入:

var updatedEntities = ChangeTracker.Entries()
    .Where(x => x.State == EntityState.Modified)
    .Select(x => x.Entity)
    .OfType<EditableEntityBase>();
foreach (var entity in updatedEntities)
{
    entity.DateTimeUpdated = DateTime.Now; // or DateTime.UtcNow
}

return base.SaveChanges();

您还可以为新记录包含 x.State == EntityState.Added,但通常我会依靠数据库中的默认值在插入时捕获它。