public static void AuditAutoCrudMetadataFilter(AutoCrudMetadata meta) { foreach (var applyAttr in meta.AutoApplyAttrs) { switch (applyAttr.Name) { case Behavior.AuditQuery: meta.Add(new AutoFilterAttribute( QueryTerm.Ensure, nameof(AuditBase.DeletedDate), SqlTemplate.IsNull)); break; case Behavior.AuditCreate: case Behavior.AuditModify: if (applyAttr.Name == Behavior.AuditCreate) { meta.Add(new AutoPopulateAttribute(nameof(AuditBase.CreatedDate)) { Eval = "utcNow" }); meta.Add(new AutoPopulateAttribute(nameof(AuditBase.CreatedBy)) { Eval = "userAuthName" }); } meta.Add(new AutoPopulateAttribute(nameof(AuditBase.ModifiedDate)) { Eval = "utcNow" }); meta.Add(new AutoPopulateAttribute(nameof(AuditBase.ModifiedBy)) { Eval = "userAuthName" }); break; case Behavior.AuditDelete: case Behavior.AuditSoftDelete: if (applyAttr.Name == Behavior.AuditSoftDelete) { meta.SoftDelete = true; } meta.Add(new AutoPopulateAttribute(nameof(AuditBase.DeletedDate)) { Eval = "utcNow" }); meta.Add(new AutoPopulateAttribute(nameof(AuditBase.DeletedBy)) { Eval = "userAuthName" }); break; } } }