Structr.EntityFrameworkCore package provides methods to easily implement auto-auditing in Entity Framework CoreDbContext, ModelBuilder extensions which applies the entity type default configuration and IQueryable<T> extensions to paginate through a list of entities.
Installation
EntityFrameworkCore package is available on NuGet.
dotnet add package Structr.EntityFrameworkCore
Usage
EntityFrameworkCore package have a reference to Structr.Domain package that provides some abstract classes for entities, value objects and interfaces which are intended to help to implement Domain Model.
Auto-auditing
Auto-auditing - it's entity change auditing for Entity Framework Core entities. The basic way to add auditing is to override the SaveChanges() method of the DbContext and plug in some logic for filling and tracking auditable properties (e.g. DateCreated or CreatedBy) automatically.
For example, create some entity that inherits Entity<TEntity,TKey> class and ICreatable interface.
publicclassIssue:Entity<Issue,int>,ICreatable{publicstring Name { get; set; }publicstring Description { get; set; }publicDateTime DateCreated { get; set; } // It's an auditable property from "ICreatable".}
Create your own DbContext class implementation with configure some auditing dependencies (e.g. ITimestampProvider) and override SaveChanges() methods.
Now if you add a new instance of Issue to DbSet<Issue> and call SaveChanges() or SaveChangesAsync() method, the DateCreated property will be filled in automatically.
Auto-configure entity types
Create your own DbContext class implementation and override OnModelCreating() method with calling ApplyEntityConfiguration(), ApplyValueObjectConfiguration() and/or ApplyAuditableConfiguration() methods.
ModelBuilder extension methods list:
Method name
Description
ApplyEntityConfiguration
Applies the default configuration for all classes inherited from the Entity<TEntity, TKey>. Automatically configures PK for entities with HasKey() method.
ApplyValueObjectConfiguration
Applies the default configuration for all classes inherited from the ValueObject<TValueObject>.
ApplyAuditableConfiguration
Applies the default configuration for all classes that implement the IAuditable.
You can configure options when applying entity types default configurations. For example, configure PK column name for all domain entities:
EntityConfigurationOptions properties:
Property name
Property type
Description
Configure
Action<IMutableEntityType, EntityTypeBuilder>
Delegate for configuring Entities. Default value is null.
Configure name strategy for all properties of value objects: