在 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
,但通常我会依靠数据库中的默认值在插入时捕获它。
有没有办法在实体更新时运行编码?例如,我有一个实体在我的代码中的许多地方进行了更新。我希望能够在更新实体时随时更新 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
,但通常我会依靠数据库中的默认值在插入时捕获它。