public static void PrepareAddDefault(this IFullAuditableDbContext dbContext, object entity) { if (entity is IAuditableEntity auditableEntity) { auditableEntity.CreatedTime = DateTimeOffset.UtcNow; } }
public static void AuditEntitiesDefault(this IFullAuditableDbContext dbContext) { var hasChanges = dbContext.ChangeTracker.HasChanges(); if (!hasChanges) { return; } var entries = dbContext.ChangeTracker.Entries() .Where(o => o.State == EntityState.Modified || o.State == EntityState.Added).ToArray(); foreach (var entry in entries) { var entity = entry.Entity; switch (entry.State) { case EntityState.Modified: dbContext.PrepareModify(entity); break; case EntityState.Added: dbContext.PrepareAdd(entity); break; } } }
public static void PrepareModifyDefault(this IFullAuditableDbContext dbContext, object entity) { var isSoftDeleted = false; if (entity is ISoftDeleteEntity) { var softDeleteEntity = entity as ISoftDeleteEntity; if (softDeleteEntity.IsDeleted) { if (softDeleteEntity.DeletedTime != null) { throw new InvalidOperationException($"{nameof(entity)} is already deleted"); } softDeleteEntity.DeletedTime = Time.Now; isSoftDeleted = true; } } if (isSoftDeleted || entity is IAuditableEntity == false) { return; } var auditableEntity = entity as IAuditableEntity; auditableEntity.LastModifiedTime = Time.Now; }
public static async Task <EntityEntry <E> > ReloadAsyncDefault <E>(this IFullAuditableDbContext dbContext, E entity) where E : class { var entry = dbContext.Entry(entity); await entry.ReloadAsync(); return(entry); }
public static EntityEntry <E> RemoveDefault <E>(this IFullAuditableDbContext dbContext, E entity, bool isPhysical) where E : class { if (isPhysical) { return(dbContext.Remove(entity)); } return(dbContext.SoftDelete(entity)); }
public static void RemoveRangeDefault <E>(this IFullAuditableDbContext dbContext, IEnumerable <E> list, bool isPhysical) where E : class { if (isPhysical) { dbContext.RemoveRange(list); return; } dbContext.SoftDeleteRange(list); }
public static void PrepareAddDefault(this IFullAuditableDbContext dbContext, object entity) { if (entity is IAuditableEntity == false) { return; } var auditableEntity = entity as IAuditableEntity; auditableEntity.CreatedTime = Time.Now; }
public static bool TryAttachDefault(this IFullAuditableDbContext dbContext, object entity, out EntityEntry entry) { entry = dbContext.Entry(entity); if (entry.State == EntityState.Detached) { entry = dbContext.Attach(entity); return(true); } return(false); }
public static bool TryAttachDefault <T>(this IFullAuditableDbContext dbContext, T entity, out EntityEntry <T> entry) where T : class { entry = dbContext.Entry(entity); if (entry.State == EntityState.Detached) { entry = dbContext.Attach(entity); return(true); } return(false); }
public static EntityEntry SoftDeleteDefault(this IFullAuditableDbContext dbContext, object entity) { if (entity is ISoftDeleteEntity softDeleteEntity) { softDeleteEntity.IsDeleted = true; var entry = dbContext.Entry(entity); entry.Property(nameof(softDeleteEntity.IsDeleted)).IsModified = true; return(entry); } throw new InvalidOperationException($"{nameof(entity)} is not {nameof(ISoftDeleteEntity)}"); }
public static async Task <EntityEntry <E> > RemoveAsyncDefault <E>(this IFullAuditableDbContext dbContext, object[] key, bool isPhysical) where E : class { var entity = await dbContext.FindAsync <E>(key); if (entity == null) { throw new KeyNotFoundException(); } if (isPhysical) { return(dbContext.Remove(entity)); } return(dbContext.SoftDelete(entity)); }
public static IQueryable <T> QueryDeletedDefault <T>(this IFullAuditableDbContext dbContext) where T : class, ISoftDeleteEntity { var eType = typeof(T); if (dbContext.IsSoftDeleteAppliedForEntity(eType)) { var clonedFilter = dbContext.GetClonedFilter(QueryFilterConsts.SoftDeleteDefaultName); var oldFilter = clonedFilter.ApplyFilter; clonedFilter.ApplyFilter = o => oldFilter(o) && o != eType; dbContext.ReplaceOrAddFilter(clonedFilter); } return(dbContext.Set <T>().IsDeleted()); }
public static EntityEntry SoftRemoveDefault(this IFullAuditableDbContext dbContext, object entity) { if (entity is ISoftDeleteEntity == false) { throw new InvalidOperationException($"{nameof(entity)} is not {nameof(ISoftDeleteEntity)}"); } var softDeleteEntity = entity as ISoftDeleteEntity; softDeleteEntity.IsDeleted = true; var entry = dbContext.Entry(entity); entry.State = EntityState.Modified; return(entry); }
public static void PrepareModifyDefault(this IFullAuditableDbContext dbContext, object entity) { var isSoftDeleted = false; if (entity is ISoftDeleteEntity softDeleteEntity) { if (softDeleteEntity.IsDeleted) { if (softDeleteEntity.DeletedTime != null) { throw new InvalidOperationException($"{nameof(entity)} is already deleted"); } softDeleteEntity.DeletedTime = DateTimeOffset.UtcNow; isSoftDeleted = true; } } if (!isSoftDeleted && entity is IAuditableEntity auditableEntity) { auditableEntity.LastModifiedTime = DateTimeOffset.UtcNow; } }
public static Task <int> SqlRemoveAllAsyncDefault(this IFullAuditableDbContext dbContext, string tblName) { return(dbContext.Database.ExecuteSqlInterpolatedAsync($"DELETE FROM {tblName}")); }