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

时间:2011-05-22 09:30:44

标签: c# .net wpf entity-framework

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

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

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

谢谢James,

1 个答案:

答案 0 :(得分: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);
}