Idam.Libs.EF
2.1.0
This package was moved to Idam.EFTimestamps.
See the version list below for details.
dotnet add package Idam.Libs.EF --version 2.1.0
NuGet\Install-Package Idam.Libs.EF -Version 2.1.0
<PackageReference Include="Idam.Libs.EF" Version="2.1.0" />
paket add Idam.Libs.EF --version 2.1.0
#r "nuget: Idam.Libs.EF, 2.1.0"
// Install Idam.Libs.EF as a Cake Addin #addin nuget:?package=Idam.Libs.EF&version=2.1.0 // Install Idam.Libs.EF as a Cake Tool #tool nuget:?package=Idam.Libs.EF&version=2.1.0
Idam.Libs.EF
Idam.Libs.EF is .Net Core (C#) for Entity Framework (EF) Utils.
Give a Star! ⭐
If you like or are using this project please give it a star. Thanks!
Features
- Soft delete (DeletedAt).
- Timestamps (CreatedAt, UpdatedAt).
Both features support DateTime and Unix Time Milliseconds format.
DateTime using Utc format
Example of Unix Time Milliseconds: currentmillis
Get started
run this command to install
Install-Package Idam.Libs.EF
or
dotnet tool install Idam.Libs.EF
Usage
Using Timestamps
Add
AddTimestamps()
in your context.using Idam.Libs.EF.Extensions; public class MyDbContext : DbContext { public override int SaveChanges(bool acceptAllChangesOnSuccess) { ChangeTracker.AddTimestamps(); return base.SaveChanges(acceptAllChangesOnSuccess); } public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default) { ChangeTracker.AddTimestamps(); return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); } }
Implement an Interface (
ITimeStamps
orITimeStampsUnix
) to your entity.using Idam.Libs.EF.Interfaces; /// Using DateTime Format public class Boo : ITimeStamps { public int Id { get; set; } public string Name { get; set; } = default!; public string? Description { get; set; } public DateTime CreatedAt { get; set; } public DateTime UpdatedAt { get; set; } } /// Using Unix Format public class Foo : ITimeStampsUnix { public int Id { get; set; } public string Name { get; set; } = default!; public string? Description { get; set; } public long CreatedAt { get; set; } public long UpdatedAt { get; set; } }
Using SoftDelete
Add
AddTimestamps()
andAddSoftDeleteFilter()
in your context. see below.using Idam.Libs.EF.Extensions; public class MyDbContext : DbContext { public override int SaveChanges(bool acceptAllChangesOnSuccess) { ChangeTracker.AddTimestamps(); return base.SaveChanges(acceptAllChangesOnSuccess); } public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default) { ChangeTracker.AddTimestamps(); return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.AddSoftDeleteFilter(); base.OnModelCreating(modelBuilder); } }
Implement an Interface (
ISoftDelete
orISoftDeleteUnix
) to your entity.using Idam.Libs.EF.Interfaces; /// Using DateTime Format public class Boo : ISoftDelete { public int Id { get; set; } public string Name { get; set; } = default!; public string? Description { get; set; } public DateTime? DeletedAt { get; set; } } /// Using Unix Format public class Foo : ISoftDeleteUnix { public int Id { get; set; } public string Name { get; set; } = default!; public string? Description { get; set; } public long? DeletedAt { get; set; } }
The SoftDelete has a restore function, so you can restore the deleted data, see below.
using Idam.Libs.EF.Extensions;
/// Your context
public class MyDbContext : DbContext
{
public DbSet<Foo> Foos => Set<Foo>();
}
/// Foo Controller
public class FooController
{
readonly MyDbContext context;
public async Task<IActionResult> RestoreAsync(Foo foo)
{
Foo restoredFoo = context.Foos.Restore(foo);
await context.SaveChangesAsync();
return Ok(restoredFoo);
}
}
Also, you can ignore the global softdelete filter by using IgnoreQueryFilters()
. See below.
public class FooController
{
public async Task<IActionResult> GetAllDeletedAsync()
{
var deletedFoos = await context.Foos
.IgnoreQueryFilters()
.Where(x => x.DeletedAt != null)
.ToListAsync();
return Ok(deletedFoos);
}
}
You can permanently delete data that has a DeletedAt value.
Using IGuidEntity
An Interface to implement Id as Guid instead of int.
using Idam.Libs.EF.Interfaces;
public class Foo : IGuidEntity
{
public Guid Id { get; set; }
public string Name { get; set; } = default!;
public string? Description { get; set; }
}
Migrating
Migrating from 2.0.1
If you implements ITimeStamps and/or ISoftDelete in your entities before, update your CreatedAt and UpdatedAt to UTC datetime.
Update DbContext
Inside SaveChanges() and SaveChangesAsync()
/// before ChangeTracker.Entries().AddTimestamps(); /// to ChangeTracker.AddTimestamps();
Inside OnModelCreating()
/// before var entityTypes = modelBuilder.Model.GetEntityTypes(); modelBuilder.AddSoftDeleteFilter(entityTypes); /// to modelBuilder.AddSoftDeleteFilter();
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 was computed. 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
- Microsoft.EntityFrameworkCore (>= 7.0.5)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
- Use UtcNow for DateTime type
- Add Permanent Delete
- Simplify AddTimestamps() in DbContext
- fix softdelete query filter