直接贴代码:
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);
}
来源:https://www.cnblogs.com/Music/p/global-set-last-updated-in-entity-framework-core.html