public static void AuditAutoCrudMetadataFilter(AutoCrudMetadata meta) { var applyAttrs = meta.AutoApplyAttrs; if (applyAttrs.IsEmpty()) { return; } var hasAuditQuery = applyAttrs.Any(x => x.Name == Behavior.AuditQuery); var hasAuditCreate = applyAttrs.Any(x => x.Name == Behavior.AuditCreate); var hasAuditModify = applyAttrs.Any(x => x.Name == Behavior.AuditModify); var hasAuditSoftDelete = applyAttrs.Any(x => x.Name == Behavior.AuditSoftDelete); if (hasAuditQuery) { meta.AddFilterAttribute(new AutoFilterAttribute( QueryTerm.Ensure, nameof(AuditBase.DeletedDate), SqlTemplate.IsNull)); } if (!hasAuditCreate && !hasAuditModify && !hasAuditSoftDelete) { return; } meta.PopulateAttrs ??= new List <AutoPopulateAttribute>(); if (hasAuditCreate) { meta.PopulateAttrs.Add(new AutoPopulateAttribute(nameof(AuditBase.CreatedDate)) { Eval = "utcNow" }); meta.PopulateAttrs.Add(new AutoPopulateAttribute(nameof(AuditBase.CreatedBy)) { Eval = "userAuthName" }); } if (hasAuditCreate || hasAuditModify) { meta.PopulateAttrs.Add(new AutoPopulateAttribute(nameof(AuditBase.ModifiedDate)) { Eval = "utcNow" }); meta.PopulateAttrs.Add(new AutoPopulateAttribute(nameof(AuditBase.ModifiedBy)) { Eval = "userAuthName" }); } if (hasAuditSoftDelete) { meta.PopulateAttrs.Add(new AutoPopulateAttribute(nameof(AuditBase.DeletedDate)) { Eval = "utcNow" }); meta.PopulateAttrs.Add(new AutoPopulateAttribute(nameof(AuditBase.DeletedBy)) { Eval = "userAuthName" }); meta.SoftDelete = true; } }