Search Results for

    Show / Hide Table of Contents

    Intent.EntityFrameworkCore.DiffAudit

    Diff auditing is a type of auditing in software systems where the focus is on capturing the differences (or �diffs�) between two states of an entity - typically before and after a change.

    General usage pattern

    Select an Entity in the Domain Designer.

    Domain Entity without Diff Audit

    Right click and select Toggle Diff Audit.

    Domain Entity with Diff Audit

    Your Entity Framework Database Provider will now include a new table called AuditLogs:

    • This table will store all changes made to all entities that have the Diff Audit stereotype applied.

    • This table will look like this:

    public record AuditLog(int Id, string TableName,  string? Key, string ColumnName,
        string? OldValue, string? NewValue, string ChangedBy, DateTimeOffset ChangedAt);
    

    Application Settings which affect this module

    This module uses the ICurrentUserService to determine the current user's identity.

    public interface ICurrentUserService
    {
        <UserID Type>? UserId { get; }
        string? UserName { get; }
        ...
    }
    

    Diff Audit Settings - User Identity to Audit

    This setting allows you to select which field you would like to use as your audit of the user's identity, the options are:

    • User Id (default), will use the UserId property and is typically more technical in nature.
    • User Name, will use the UserName property.

    Diff Audit Interface

    This introduces a IDiffAudit interface in your Domainproject which gets added to class Entities that are decorated with the Diff Audit stereotype.

    public interface IDiffAudit { }
    

    Example:

    public class Person : IHasDomainEvent, IDiffAudit
    {
        public Guid Id { get; set; }
    
        public string FirstName { get; set; }
        
        public string LastName { get; set; }
        
        public DateOnly DateOfBirth { get; set; }
    
        public List<DomainEvent> DomainEvents { get; set; } = new List<DomainEvent>();
    }
    

    Intent.EntityFrameworkCore integration

    Your DbContext will also be extended to automatically track any changes to Entities with the IDiffAudit interface using the injected ICurrentUserService to resolve the "current user" at the time.

    public override async Task<int> SaveChangesAsync(
        bool acceptAllChangesOnSuccess,
        CancellationToken cancellationToken = default)
    {
        LogDiffAudit();
        
        // ...
    }
    
    • Edit this page
    ☀
    ☾
    In this article
    Back to top Copyright © 2017-, Intent Software Pte Ltd.