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

不想你离开。 提交于 2020-04-01 05:50:38

直接贴代码:

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!