gpt4 book ai didi

entity-framework - EF 核心 : Built in Created and Edited timestamps

转载 作者:行者123 更新时间:2023-12-04 07:24:20 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to add the same column to all entities in EF Core?

(2 个回答)


1年前关闭。




标题是不言自明的。是否有内置机制来支持 Entity Framework Core 中代码优先数据库中记录的 Created 和 Edited 时间戳?

:created_at:updated_at在 Ruby on Rails 迁移中。我找不到任何有关此的文件。如果不存在开箱即用的机制,是否有最佳实践如何实现这些列?

最佳答案

如果没有一些返工,非 EF Core 解决方案不适用于 EF Core。我想让某些实体拥有 CreatedAtLastModified以合理的自动化方式更新的时间戳。这就是我最终做的。

  • 定义了一个接口(interface) - ITimeStampedModel我的模型可以继承需要它们具有我想要的时间戳:
    public interface ITimeStampedModel
    {
    DateTime CreatedAt {get; set;}
    DateTime LastModified {get; set;}
    }
  • 覆盖 SaveChanges在我的 DbContext寻找新的或修改过的模型,并适本地更新它们的时间戳:
    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();
    }

  • 有人有更好的解决方案吗?

    关于entity-framework - EF 核心 : Built in Created and Edited timestamps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46927542/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com