Search Results for

      Show / Hide Table of Contents

      Intent.Entities.BasicAuditing

      Basic auditing in database management is a pattern used to track key information about the creation and last modification of records. This involves adding fields to your SQL table such as CreatedBy, CreatedDate, UpdatedBy and UpdatedDate. This pattern offers a straightforward way to capture and display who initially created a record and who last modified it, along with the relevant timestamps. However, it is important to note that this approach provides a snapshot of the most recent actions rather than a comprehensive audit trail of all changes made over time.

      Note

      This is not an Audit Trail but merely a way to determine who touched an Entity and when.

      General usage pattern

      Select an Entity in the Domain Designer.

      Domain Entity without Basic Auditing

      Right click and select Toggle Basic Auditing.

      Domain Entity with Basic Auditing

      Your Entity will now be extended with the following attributes:

      • CreatedBy - User Identity that created this Entity instance.
      • CreatedDate - Timestamp when creation took place.
      • UpdatedBy - User Identity that updated this Entity instance.
      • UpdatedDate - Timestamp when creation took place.
      Note

      It is worth noting that the "updated" attributes remain null upon creation and only get populated when an update has taken place.

      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; }
          ...
      }
      

      Basic Auditing 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.

      Identity Settings - UserId Type

      This setting allows you to specify what the type of the UserId on the ICurrentUserService should be. Allowing you to customize how you want you audi data persisted.

      • string (default)
      • guid
      • int
      • long

      The Audit fields of CreatedBy and UpdatedBy will respect the above settings.

      Note

      If you adjust the above settings after you have already modeled Classes with basic auditing, you can Right Click on any Audited class and select the Synchronize Auditing Identifiers option. This will update your existing Domain Model such that the CreatedBy and UpdatedBy attributes have the newly configured types.

      This introduces a IAuditible interface in your Domainproject which gets added to class Entities that are decorated with the Basic Auditing stereotype.

      public interface IAuditable
      {
          string CreatedBy { get; set; }
          DateTimeOffset CreatedDate { get; set; }
          string? UpdatedBy { get; set; }
          DateTimeOffset? UpdatedDate { get; set; }
      }
      

      Example:

      public class Person : IHasDomainEvent, IAuditable
      {
          public Guid Id { get; set; }
      
          public string FirstName { get; set; }
          
          public string LastName { get; set; }
          
          public DateTime DateOfBirth { get; set; }
      
          public string CreatedBy { get; set; }
      
          public DateTimeOffset CreatedDate { get; set; }
      
          public string? UpdatedBy { get; set; }
      
          public DateTimeOffset? UpdatedDate { get; set; }
      
          public List<DomainEvent> DomainEvents { get; set; } = new List<DomainEvent>();
      }
      

      Intent.EntityFrameworkCore integration

      If you have the Intent.EntityFrameworkCore module installed, your DbContext will also be extended to automatically populate the Entities with the IAuditable interface using the injected ICurrentUserService to resolve the "current user" at the time.

      public override async Task<int> SaveChangesAsync(
          bool acceptAllChangesOnSuccess,
          CancellationToken cancellationToken = default)
      {
          SetAuditableFields();
          
          // ...
      }
      

      Intent.CosmosDB integration

      If you have Intent.CosmosDB module installed, the CosmosDBRepositoryBase will be updated to set the auditable fields as appropriate.

      • Edit this page
      ☀
      ☾
      In this article
      Back to top Copyright © 2017-, Intent Architect Holdings Ltd