Extension library for Entity Framework Core which allows developers who use SQL Server to easily use temporal tables.
How to use it?
- Use
UseInternalServiceProvider()
onDbContextOptionsBuilder
when registering your DbContext to replace Entity Framework's internal service provider with yours. For example:
services.AddDbContextPool<MyDbContext>((provider, options) =>
{
options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
options.UseInternalServiceProvider(provider);
});
-
Then register all Entity Framework services into your service provider by using:
services.AddEntityFrameworkSqlServer();
-
And finally call:
services.RegisterTemporalTablesForDatabase<MyDbContext>();
Use the first two settings only when you want your temporal tables to be executed by default when using Update-Database
command from Package Manager Console or DbContext.Database.Migrate() / DbContext.Database.MigrateAsync()
.
If you want to handle the temporal tables SQL execution yourself, you can do it manually by using:
var temporalTableSqlExecutor = serviceProvider.GetService<ITemporalTableSqlExecutor<MyDbContext>>();
temporalTableSqlExecutor.Execute();
In OnModelCreating(ModelBuilder modelBuilder)
method you have the following options:
-
modelBuilder.UseTemporalTables()
- create temporal table for all of your entities by default. -
modelBuilder.PreventTemporalTables()
- do not create temporal table for none of your entities by default. -
modelBuilder.Entity<TEntity>(b => b.UseTemporalTable());
- create a temporal table for the specified entityTEntity
. This method is compatible withUseTemporalTables()
andPreventTemporalTables()
methods - e.g. you can callPreventTemporalTables()
and then only register the entities you want. -
modelBuilder.Entity<TEntity>(b => b.PreventTemporalTable());
- do not create a temporal table for the specified entityTEntity
. This method is also compatible withUseTemporalTables()
andPreventTemporalTables()
methods.
You can refer to the sample application for more configuration information.
You can install the NuGet package from here: https://www.nuget.org/packages/EntityFrameworkCore.TemporalTables/