我希望每条添加\更改的记录都有一个创建\更改的时间戳。
但是 - 所以它很容易嵌入和易于管理 - 自动。
覆盖“DbContext”类或将其嵌入“.tt”文件(Codefirst \ DBFirst)
代码假设您在 POCO 中有字段“CreatedOn”\“ModifiedOn”。
如果你没有它们,或者你只有一个 - 代码可以正常工作。
意识到!如果您使用扩展名(如这个),则允许您从存储过程进行批量更新或更改 - 这将不起作用
编辑:
我找到了灵感的源泉——在这里感谢“尼克”
public override int SaveChanges()
{
var context = ((IObjectContextAdapter)this).ObjectContext;
var currentTime = DateTime.Now;
var objectStateEntries = from v in context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified)
where v.IsRelationship == false && v.Entity != null
select v;
foreach (var entry in objectStateEntries)
{
var createdOnProp = entry.Entity.GetType().GetProperty("CreatedOn");
if (createdOnProp != null)
{
if (entry.State == EntityState.Added)
{
if (createdOnProp != null)
{
createdOnProp.SetValue(entry.Entity, currentTime);
}
}
else
{
Entry(entry.Entity).Property("CreatedOn").IsModified = false;
}
}
var modifiedOnProp = entry.Entity.GetType().GetProperty("ModifiedOn");
if (modifiedOnProp != null)
{
modifiedOnProp.SetValue(entry.Entity, currentTime);
}
}
return base.SaveChanges();
}