lss*_*lss 7 entity-framework entity-framework-core asp.net-core
标题是不言自明的。是否存在内置机制来支持Entity Framework Core中代码优先数据库中记录的创建和编辑时间戳记?
喜欢的东西:created_at
,并:updated_at
在Ruby on Rails的迁移。我找不到与此有关的任何文档。如果没有现成的机制,是否有最佳实践来实现这些列?
如果不进行一些返工,非 EF Core 解决方案不适用于 EF Core。我希望允许某些实体拥有以相当自动化的方式更新的时间戳CreatedAt
。LastModified
这就是我最终所做的。
定义了一个接口 -ITimeStampedModel
我的模型可以继承该接口,要求它们具有我想要的时间戳:
public interface ITimeStampedModel
{
DateTime CreatedAt {get; set;}
DateTime LastModified {get; set;}
}
Run Code Online (Sandbox Code Playgroud)覆盖SaveChanges
myDbContext
以查找新的或修改的模型,并适当更新它们的时间戳:
public override int SaveChanges()
{
var newEntities = this.ChangeTracker.Entries()
.Where(
x => x.State == EntityState.Added &&
x.Entity != null &&
x.Entity as ITimeStampedModel != null
)
.Select(x => x.Entity as ITimeStampedModel);
var modifiedEntities = this.ChangeTracker.Entries()
.Where(
x => x.State == EntityState.Modified &&
x.Entity != null &&
x.Entity as ITimeStampedModel != null
)
.Select(x => x.Entity as ITimeStampedModel);
foreach (var newEntity in newEntities)
{
newEntity.CreatedAt = DateTime.UtcNow;
newEntity.LastModified = DateTime.UtcNow;
}
foreach (var modifiedEntity in modifiedEntities)
{
modifiedEntity.LastModified = DateTime.UtcNow;
}
return base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)有人有更好的解决方案吗?
归档时间: |
|
查看次数: |
2226 次 |
最近记录: |