SampleDotnet.RepositoryFactory
3.0.1
for the multiple DbContext, when occurs DbException, creates another transaction to rolling back entities for the commited transaction (compensate transaction) , if only one DContext It works normal)
See the version list below for details.
dotnet add package SampleDotnet.RepositoryFactory --version 3.0.1
NuGet\Install-Package SampleDotnet.RepositoryFactory -Version 3.0.1
<PackageReference Include="SampleDotnet.RepositoryFactory" Version="3.0.1" />
paket add SampleDotnet.RepositoryFactory --version 3.0.1
#r "nuget: SampleDotnet.RepositoryFactory, 3.0.1"
// Install SampleDotnet.RepositoryFactory as a Cake Addin #addin nuget:?package=SampleDotnet.RepositoryFactory&version=3.0.1 // Install SampleDotnet.RepositoryFactory as a Cake Tool #tool nuget:?package=SampleDotnet.RepositoryFactory&version=3.0.1
EFCore DbContext RepositoryFactory Pattern managed by DbContextFactory
EntityFrameworkCore doesn't support multiple parallel operations, when we need parallel actions in different threads such as adding or deleting on the same DbContext, It throws an exception when calling SaveChanges source.
NOTE: DbContext service scope set as Transient which managed by IServiceScopeFactory
How to Use
using SampleDotnet.RepositoryFactory;
ServiceCollection Definition
services.AddDbContextFactoryWithUnitOfWork<UserDbContext>(opt =>
{
opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
});
then we call transient scoped DbContext
public class UserController : Controller
{
private readonly IUnitOfWork _unitOfWork;
public UserController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
[HttpDelete("{id}")]
public ActionResult Delete(Guid id)
{
using (var repository = _unitOfWork.CreateRepository<UserDbContext>())
{
var personal = repository.FirstOrDefault<UserEntity>(f => f.Id == id);
//some operations goes here....
repository.Delete(personal);
//some operations goes here....
}
_unitOfWork.SaveChanges();
return Ok();
}
}
Additional Feature
- If
IHasDateTimeOffset
interfece used on Entity object then value of the the CreatedAt and UpdatedAt properties will be updated automatically.
public class TestUserEntity : IHasDateTimeOffset
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public DateTimeOffset? CreatedAt { get; set; }
public DateTimeOffset? UpdatedAt { get; set; }
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. 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. |
-
net6.0
- AutoMapper.Extensions.Microsoft.DependencyInjection (>= 12.0.0)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 6.0.0)
- Microsoft.Data.SqlClient (>= 5.1.1)
- Microsoft.EntityFrameworkCore (>= 6.0.0)
- Microsoft.EntityFrameworkCore.Relational (>= 6.0.0)
- Microsoft.EntityFrameworkCore.SqlServer (>= 6.0.0)
-
net7.0
- AutoMapper.Extensions.Microsoft.DependencyInjection (>= 12.0.0)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 6.0.0)
- Microsoft.Data.SqlClient (>= 5.1.1)
- Microsoft.EntityFrameworkCore (>= 6.0.0)
- Microsoft.EntityFrameworkCore.Relational (>= 6.0.0)
- Microsoft.EntityFrameworkCore.SqlServer (>= 6.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
3.1.0-preview2 | 52 | 9/3/2024 | |
3.0.3-preview1 | 87 | 9/1/2024 | |
3.0.1 | 300 | 4/9/2023 | |
3.0.0.5-alpha | 181 | 4/8/2023 | |
2.1.0 | 271 | 3/18/2023 | |
2.0.0 | 277 | 3/13/2023 | |
1.0.0 | 287 | 2/25/2023 |