为什么不能执行软删除?



我想在DB中将字符标记为false并检索真实的字符。这就是我声明的bool IsDeleted { get; set; } = true

角色服务

public async Task<ServiceResponse<List<GetCharacterDto>>> sDeleteCharacter(int id)
{
ServiceResponse<List<GetCharacterDto>> response = new ServiceResponse<List<GetCharacterDto>>();

Character character = await _context.Characters
.FirstOrDefaultAsync(c => c.Id == id && c.User.Id == GetUserId());
if (character != null)
{
character.IsDeleted = false ;
await _context.SaveChangesAsync();
response.Data = _context.Characters
.Where(c => c.User.Id == GetUserId()) 
.Select(c => _mapper.Map<GetCharacterDto>(c)).ToList();
}

GetAll方法,其中我根据IsDelete

指定要检索的字符。
public async Task<ServiceResponse<List<GetCharacterDto>>> GetAllCharacters()
{
var response = new ServiceResponse<List<GetCharacterDto>>();
var dbCharacters = await _context.Characters

.Where(c => c.User.Id == GetUserId() && c.IsDeleted== true)
.ToListAsync(); 
response.Data = dbCharacters.Select(c => _mapper.Map<GetCharacterDto>(c)).ToList();
return response;

我解决了这个问题-只需重写savechanges()

using System;
namespace SoftDeleted.Models
{
public interface ISoftDeleted

{
bool IsDeleted { get; set; }    
}
}

DB



public class DataContext : DbContext
{
public DataContext(DbContextOptions<DataContext> options) : base(options)
{

}
protected override void OnModelCreating(ModelBuilder modelBuilder) 
{
modelBuilder.Entity<Employee>().HasQueryFilter(b => !b.IsDeleted);
}
public override int SaveChanges() 
{
HandleEmployeeDelete();
return base.SaveChanges();
}
private void HandleEmployeeDelete() 
{
var entities = ChangeTracker.Entries()
.Where(e => e.State == EntityState.Deleted);
foreach(var entity in entities) 
{
if (entity.Entity is Employee) 
{
entity.State = EntityState.Modified;
var c= entity.Entity as Employee;
c.IsDeleted = true;
}
}
}


public DbSet<Employee> Employees { get; set; }


}
}

最新更新