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

Car*_*s00 4 .net c# wpf entity-framework

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

然后,用户编辑DataGrid并按SAVE.然后使用数据将数据保存回MS SQL Server 2008 SaveChanges().嗯......现在,我希望有一个AUTOMATIC时间戳,它存储上次更改的时间并自动更新.

伙计们,这可能吗?怎么样?

谢谢詹姆斯

Lad*_*nka 6

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

  • 在表中创建一个新列以存储您的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);
}
Run Code Online (Sandbox Code Playgroud)