Home > Net >  Delete multiple row with ids without foreach and postman test
Delete multiple row with ids without foreach and postman test

Time:01-08

I have a little problem. But I dont know why it doesnt work. And I dont know how to post all ids by postman.

I am using unit of work with generic repository. I want to send int[] ids to my controller. I dont want to send entity. I searched a lot it today. And I changed my code. But what is problem now?

This is my repostiroy:

  public async Task DeleteRangeAsync(Expression<Func<T, bool>> predicate)
        {
            IQueryable<T> query = _dbSet.Where(predicate);
            await Task.Run(() => { _dbSet.RemoveRange(query.AsNoTracking()); });
        }

This is my KulturManager:

 public async Task<IResult> HardDeleteRangeAsync(int[] ids)
        {
            await UnitOfWork.Kulturs.DeleteRangeAsync(c => ids.Contains(c.Id));
            await UnitOfWork.SaveAsync();
            return new Result(ResultStatus.Success, Messages.Info("Kultur", "HardDelete"));
        }

And this is my KulturController:

   [HttpDelete("{ids}")]
        public async Task<IActionResult> HardDeleteRangeAsync(int[] ids)
        {
            var result = await _kulturManager.HardDeleteRangeAsync(ids);
            return Ok(result.Message);
        }

Thank you for help

CodePudding user response:

You shouldn't fetch all the entities you want to delete. Instead create stub entities for RemoveRange. If you don't have a common base class, this requires reflection, but with a common entity base class you can do it like this:

public void DeleteRange<T>(int[] ids) where T: BaseEntity, new()
{
    _dbSet.RemoveRange(ids.Select(i => new T() { Id = i }).ToList());
}

or if the method is in a generic class, the method would look like

public void DeleteRange(int[] ids) 
{
    _dbSet.RemoveRange(ids.Select(i => new T() { Id = i }).ToList());
}

And there's no reason to mark this as Async now since it doesn't do any database access.

CodePudding user response:

It is is generic class. So ı used this code:

public void DeleteRangeAsync(int[] ids) 
{
    _dbSet.RemoveRange(ids.Select(i => new T() { Id = i }).ToList());
}

Now, how can i test it in postman? I dont know how to send many ids.

  •  Tags:  
  • Related