c# - 如何在 EF Code First 中创建/更新 LastModified 字段

标签 c# entity-framework ef-code-first

我想添加一个列来存储记录保存到磁盘时的当前日期时间。实现这一目标的最佳方法是什么?

我知道这不是一个非常复杂的问题,但我想知道是否有任何最佳实践或 EF 的任何功能可以简化任务。 例如:

  • 有什么方法可以在表 Class 中包含此字段的逻辑,以便在将其保存到磁盘时自动更新?
  • 当修改或保存对象时是否有任何事件要捕获?

最佳答案

一个选择是创建存储库层并实现您自己的 SaveChanges

public void SaveChanges()
{
    foreach (var entry in Context.ChangeTracker.Entries<ICreatedAt>().Where(x => x.State == EntityState.Added && x.Entity.CreatedAt == default(DateTime)))
            entry.Entity.CreatedAt = DateTime.Now;

    foreach (var entry in Context.ChangeTracker.Entries<ICreatedBy>().Where(x => x.State == EntityState.Added && x.Entity.CreatedBy == null))
        entry.Entity.CreatedBy = ContextManager.CurrentUser;

    foreach (var entry in Context.ChangeTracker.Entries<IModifiedAt>().Where(x => x.State == EntityState.Modified))
        entry.Entity.ModifiedAt = DateTime.Now;

    foreach (var entry in Context.ChangeTracker.Entries<IModifiedBy>().Where(x => x.State == EntityState.Modified))
        entry.Entity.ModifiedBy = ContextManager.CurrentUser;

    Context.SaveChanges();
}

关于c# - 如何在 EF Code First 中创建/更新 LastModified 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6029766/

相关文章:

c# - 在 WPF 中将 IsEnabled 绑定(bind)到 IsChecked

c# - 如何在 C# 中停止 ffmpeg 视频录制?

c# - 首先从 EF 6.1 代码生成 SQL View

c# - 影子主键

c# - 获取发送控件的名称属性以用于不透明度更改

c# - HttpClient - 处理聚合异常

entity-framework - 具有现有数据库的 Entity Framework

c# - 使用 Entity Framework Core 在具有多对多关系的数据透视表中插入新记录

entity-framework - 防止 Entity Framework 在每个类型继承的表中添加重复的键

c# - 实体注释属性不起作用