Idam.Libs.EF
2.0.1
This package was moved to Idam.EFTimestamps.
See the version list below for details.
dotnet add package Idam.Libs.EF --version 2.0.1
NuGet\Install-Package Idam.Libs.EF -Version 2.0.1
<PackageReference Include="Idam.Libs.EF" Version="2.0.1" />
paket add Idam.Libs.EF --version 2.0.1
#r "nuget: Idam.Libs.EF, 2.0.1"
// Install Idam.Libs.EF as a Cake Addin #addin nuget:?package=Idam.Libs.EF&version=2.0.1 // Install Idam.Libs.EF as a Cake Tool #tool nuget:?package=Idam.Libs.EF&version=2.0.1
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 (CreatedAt).
- Timestamps (CreatedAt, UpdatedAt).
Both features support DateTime and Unix Time Milliseconds 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.Entries().AddTimestamps();
return base.SaveChanges(acceptAllChangesOnSuccess);
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
{
ChangeTracker.Entries().AddTimestamps();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
}
- Implement a 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.Entries().AddTimestamps();
return base.SaveChanges(acceptAllChangesOnSuccess);
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
{
ChangeTracker.Entries().AddTimestamps();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var entityTypes = modelBuilder.Model.GetEntityTypes();
modelBuilder.AddSoftDeleteFilter(entityTypes);
base.OnModelCreating(modelBuilder);
}
}
- Implement a 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 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 ingore 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);
}
}
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; }
}
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.
Add DateTime support