加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

entity-framework – EF Core:内置Created和Edited时间戳

发布时间:2020-12-16 09:33:13 所属栏目:asp.Net 来源:网络整理
导读:标题是不言自明的.是否有内置机制来支持Entity Framework Core中代码优先数据库中记录的Created和Edited时间戳? 类似于:Ruby on Rails迁移中的created_at和:updated_at.我找不到任何有关此问题的文件.如果没有现成的机制,是否有最佳实践如何实现这些列?
标题是不言自明的.是否有内置机制来支持Entity Framework Core中代码优先数据库中记录的Created和Edited时间戳?

类似于:Ruby on Rails迁移中的created_at和:updated_at.我找不到任何有关此问题的文件.如果没有现成的机制,是否有最佳实践如何实现这些列?

解决方法

如果没有一些返工,非EF核心解决方案不适用于EF Core.我想允许某些实体拥有以合理自动化方式更新的CreatedAt和LastModified时间戳.这就是我最终做的事情.

>定义了一个接口 – 我的模型可以继承的TimeStampedModel要求它们拥有我想要的时间戳:

public interface TimeStampedModel
{
    DateTime CreatedAt {get; set;}
    DateTime LastModified {get; set;}
}

>覆盖我的DbContext上的SaveChanges以查找新的或修改的模型,并适当地更新它们的时间戳:

public override int SaveChanges()
{
    var newEntities = this.ChangeTracker.Entries()
        .Where(
            x => x.State == EntityState.Added &&
            x.Entity != null &&
            x.Entity as TimeStampedModel != null
            )
        .Select(x => x.Entity as TimeStampedModel);

    var modifiedEntities = this.ChangeTracker.Entries() 
        .Where(
            x => x.State == EntityState.Modified &&
            x.Entity != null &&
            x.Entity as TimeStampedModel != null
            )
        .Select(x => x.Entity as TimeStampedModel);

    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();
}

谁有更好的解决方案?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读