代码改变世界

在 EF Core 中 Book 实体在新增、修改、删除时,给 LastUpdated 字段赋值。

  音乐让我说  阅读(388)  评论(0编辑  收藏  举报

直接贴代码:

复制代码
public class MenusContext : DbContext
{
    public static class ColumnNames
    {
        public const string LastUpdated = nameof(LastUpdated);
    }

    private const string ConnectionString = @"server=(localdb)\mssqllocaldb;database=Restaurant1;trusted_connection=true";

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => 
        optionsBuilder.UseSqlServer(ConnectionString);

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // shadow state
        modelBuilder.Entity<MenuItem>().Property<DateTime>(LastUpdated);

        modelBuilder.Entity<MenuItem>().Property(m => m.Text).IsRequired().HasMaxLength(40);

        // use anonymous types to pass shadow state information
        modelBuilder.Entity<MenuItem>().HasData(
            new { MenuItemId = 1, Text = "Wiener Schnitzel mit Kartoffelsalat", MenuDate = new DateTime(2018, 8, 27), LastUpdated = DateTime.Now },
            new { MenuItemId = 2, Text = "Faschierter Braten mit Karoffelpüree", MenuDate = new DateTime(2018, 8, 28), LastUpdated = DateTime.Now });
    }

    public DbSet<MenuItem> MenuItems { get; set; }

    public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
    {
        ChangeTracker.DetectChanges();

        foreach (var item in ChangeTracker.Entries<Book>()
            .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted))
        {
            item.CurrentValues[LastUpdated] = DateTime.Now;
        }

        return base.SaveChangesAsync(cancellationToken);
    }

    public override int SaveChanges() => SaveChangesAsync().Result;
}
复制代码

 

请注意代码:

复制代码
    public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
    {
        ChangeTracker.DetectChanges();

        foreach (var item in ChangeTracker.Entries<Book>()
            .Where(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted))
        {
            item.CurrentValues[LastUpdated] = DateTime.Now;
        }

        return base.SaveChangesAsync(cancellationToken);
    }
复制代码

 

点击右上角即可分享
微信分享提示