实体管理器中自动生成的时间戳
我有一个绑定到某些实体的WPF DataGrid(entity framework4+)。
然后,用户编辑DataGrid并按SAVE。 然后使用SaveChanges()
将数据保存回MS SQL Server 2008。 嗯…现在,我想拥有AUTOMATIC时间戳,它存储上次更改的时间并自动更新。
伙计们,这可能吗? 怎么样?
谢谢詹姆斯
实现此目的的最简单的解决方案是在数据库级别:
- 在表中创建一个新列以存储
DateTime
值。 - 创建数据库触发器以为每个插入或更新表设置列。
- 将新列映射为实体中的属性
- 将新属性的
StoreGeneratedPattern
设置为Computed
以便在每次插入或更新后,将数据库中生成的值正确更新到附加实体。
如果您不喜欢触发器,则必须在覆盖SaveChanges时手动执行此操作,您可以在其中找到将插入或更新的所有实体并设置列:
public override int SaveChanges(SaveOptions options) { var entities = ObjectStateManger.GetObjectStateEntries(EntityState.Added | EntityState.Modified) .Select(e => e.Entity) .OfType(); DateTime now = DateTime.Now; foreach(var entity in entities) { entity.Updated = now; } return base.SaveChanges(options); }