新增 ApplicationDbContext 並實現時間戳功能
新增 `ApplicationDbContext` 類別,繼承自 `DbContext`,並定義 `Departments`、`Roles` 和 `Accounts` 的 `DbSet` 屬性以管理實體。在 `OnModelCreating` 方法中應用相應的實體配置。覆寫 `SaveChanges` 和 `SaveChangesAsync` 方法,並新增 `ApplyTimestamps` 方法以自動設置實體的 `CreatedAt` 和 `UpdatedAt` 時間戳。
This commit is contained in:
parent
194609720a
commit
196a07ef9a
63
Configurations.cs
Normal file
63
Configurations.cs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Models.Entities;
|
||||||
|
using Configurations;
|
||||||
|
|
||||||
|
public class ApplicationDbContext : DbContext
|
||||||
|
{
|
||||||
|
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
|
||||||
|
: base(options)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public DbSet<Department> Departments => Set<Department>();
|
||||||
|
public DbSet<Role> Roles => Set<Role>();
|
||||||
|
public DbSet<Account> Accounts => Set<Account>();
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
base.OnModelCreating(modelBuilder);
|
||||||
|
|
||||||
|
// ®M¥Î©Ò¦³ EntityTypeConfiguration
|
||||||
|
modelBuilder.ApplyConfiguration(new DepartmentConfiguration());
|
||||||
|
modelBuilder.ApplyConfiguration(new RoleConfiguration());
|
||||||
|
modelBuilder.ApplyConfiguration(new AccountConfiguration());
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int SaveChanges()
|
||||||
|
{
|
||||||
|
ApplyTimestamps();
|
||||||
|
return base.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
ApplyTimestamps();
|
||||||
|
return base.SaveChangesAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ApplyTimestamps()
|
||||||
|
{
|
||||||
|
var utcNow = DateTime.UtcNow;
|
||||||
|
|
||||||
|
foreach (var entry in ChangeTracker.Entries<BaseEntity>())
|
||||||
|
{
|
||||||
|
switch (entry.State)
|
||||||
|
{
|
||||||
|
case EntityState.Added:
|
||||||
|
entry.Entity.CreatedAt = utcNow;
|
||||||
|
entry.Entity.UpdatedAt = null;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EntityState.Modified:
|
||||||
|
// Á×§K×§ï CreatedAt
|
||||||
|
entry.Property(e => e.CreatedAt).IsModified = false;
|
||||||
|
entry.Entity.UpdatedAt = utcNow;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user