C Sharp - Linq - Soft Deletes

Soft Deletes

See https://spin.atomicobject.com/2019/01/29/entity-framework-core-soft-delete/ for a discussion about softdeletes (isDeleted flag) apparently .Net Core has support for soft deletes.

Your model has this

1
2
3
4
5
6
7
8
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);

builder.Entity<MyModel>().Property<bool>("isDeleted");
builder.Entity<MyModel>().HasQueryFilter(m => EF.Property<bool>(m, "isDeleted") == false);
}

And your save function also has code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public override int SaveChanges()
{
UpdateSoftDeleteStatuses();
return base.SaveChanges();
}

private void UpdateSoftDeleteStatuses()
{
foreach (var entry in ChangeTracker.Entries())
{
switch (entry.State)
{
case EntityState.Added:
entry.CurrentValues["isDeleted"] = false;
break;
case EntityState.Deleted:
entry.State = EntityState.Modified;
entry.CurrentValues["isDeleted"] = true;
break;
}
}
}