实体管理器中自动生成的时间戳

本文关键字:时间戳 自动生成 管理器 实体 | 更新日期: 2023-09-27 17:57:06

我有一个绑定到某些实体的WPF DataGrid(实体框架4+)。

然后,用户编辑数据网格并按保存。然后使用SaveChanges()将数据保存回MS SQL Server 2008。井。。。现在,我想要自动时间戳,它存储上次更改的时间并自动更新。

伙计们,这可能吗?如何?

谢谢你,詹姆斯

实体管理器中自动生成的时间戳

实现此目的的最简单解决方案是在数据库级别:

  • 在表中创建一个新列来存储DateTime值。
  • 创建数据库触发器以设置每次插入或更新表的列。
  • 将新列映射为实体中的属性
  • 将新属性的StoreGeneratedPattern设置为Computed,以便在每次插入或更新后将数据库中生成的值正确更新为附加的实体。

如果您不喜欢触发器,则必须在覆盖的 SaveChanges 中手动执行此操作,您可以在其中找到将插入或更新的所有实体并设置列:

public override int SaveChanges(SaveOptions options)
{
    var entities = ObjectStateManger.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
                                    .Select(e => e.Entity)
                                    .OfType<YourEntityType>();
    DateTime now = DateTime.Now;
    foreach(var entity in entities)
    {
        entity.Updated = now;
    }
    return base.SaveChanges(options);
}