Zejji.DbContextScope.EFCore
7.0.4
See the version list below for details.
dotnet add package Zejji.DbContextScope.EFCore --version 7.0.4
NuGet\Install-Package Zejji.DbContextScope.EFCore -Version 7.0.4
<PackageReference Include="Zejji.DbContextScope.EFCore" Version="7.0.4" />
paket add Zejji.DbContextScope.EFCore --version 7.0.4
#r "nuget: Zejji.DbContextScope.EFCore, 7.0.4"
// Install Zejji.DbContextScope.EFCore as a Cake Addin #addin nuget:?package=Zejji.DbContextScope.EFCore&version=7.0.4 // Install Zejji.DbContextScope.EFCore as a Cake Tool #tool nuget:?package=Zejji.DbContextScope.EFCore&version=7.0.4
DbContextScope.EFCore
A library for managing the lifetime of Entity Framework Core DbContext instances.
NB: Please use the version of this library which matches your EF Core version.
This package is based on the original DbContextScope repository by Mehdi El Gueddari with the following changes:
- updated for .NET 6+ and EF Core (including replacing usages of
CallContext
withAsyncLocal
); - added fix for
RefreshEntitiesInParentScope
method so that it works correctly for entities with composite primary keys; - added fix for
DbContextCollection
'sCommit
andCommitAsync
methods so thatSaveChanges
can be called more than once if there is aDbUpdateConcurrencyException
(see this unmerged pull request in the originalDbContextScope
repository); - added the
RegisteredDbContextFactory
class as a concrete implementation of theIDbContextFactory
interface, which allows users to easily register factory functions for one or moreDbContext
type(s) during startup; and - added unit tests.
Description
Mehdi El Gueddari's original article describing the thinking behind the DbContextScope
library can be found here.
In summary, the library addresses the problem that injecting DbContext
instances as a scoped dependency (which ordinarily results in one instance per web request) offers insufficient control over the lifetime of DbContext
instances in more complex scenarios.
The DbContextScope
library allows users to create scopes which control the lifetime of ambient DbContext
instances, as well giving control over the exact time at which changes are saved.
For general usage instructions, see article referred to above and the original GitHub repository readme file (a copy of which is included in this repository here). Please note the Mehdime.Entity
namespace has been renamed to Zejji.Entity
.
The new RegisteredDbContextFactory
class can be used as follows:
- In
Startup.cs
, register aRegisteredDbContextFactory
instance as a singleton and register one or moreDbContext
factory functions on that instance, e.g.:
using Zejji.Entity;
...
public void ConfigureServices(IServiceCollection services)
{
...
// Create an instance of the RegisteredDbContextFactory
var dbContextFactory = new RegisteredDbContextFactory();
// Register factory functions for each of the required DbContext types
dbContextFactory.RegisterDbContextType<DbContextOne>(() =>
new DbContextOne(Configuration.GetConnectionString("DatabaseOne")));
dbContextFactory.RegisterDbContextType<DbContextTwo>(() =>
new DbContextTwo(Configuration.GetConnectionString("DatabaseTwo")));
// Register the RegisteredDbContextFactory instance as a singleton
// with the dependency injection container.
services.AddSingleton<IDbContextFactory>(dbContextFactory);
...
}
See also the unit tests for RegisteredDbContextFactory
here.
Getting Started
Dependencies
- .NET 6+
- EF Core (version equal to or higher than Zejji.DbContextScope.EFCore package version)
Installing
dotnet add package Zejji.DbContextScope.EFCore
License
This project is licensed under the MIT License - see the LICENSE.txt file for details
Acknowledgments
Many thanks to Mehdi El Gueddari for creating the original DbContextScope
library.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net7.0
- Microsoft.EntityFrameworkCore (>= 7.0.4)
- Microsoft.EntityFrameworkCore.Relational (>= 7.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.