从C#数据库删除项目使用HttpDelete

从C#数据库删除项目使用HttpDelete

问题描述:

我想从我的数据库中删除一行基于主键ID字段。当我尝试这样做时,所有的代码都没有任何错误地执行,但该项不会从数据库中删除。从C#数据库删除项目使用HttpDelete

我传递的项目我的C#后端从一个角前端调用是这样的:

delete(customerId: number, materialCustomerId: number): Observable<Response> { 
    return this.http.delete(`${this.getBaseUrl()}/${customerId}/materialcustomer/${materialCustomerId}`).catch(error => this.handleError(error)); 
} 

然后它打我控制器的方法:

[HttpDelete] 
    [Route("{customerId}/materialcustomer/{materialCustomerId}")] 
    [AccessControl(Securable.Customer, Permissions.Delete, Permissions.Execute)] 
    public async Task Delete(int customerId, int materialCustomerId) 
    { 
     await _materialCustomerDeleter.DeleteAsync(MaterialCustomer.CreateWithOnlyId(materialCustomerId), HttpContext.RequestAborted); 
    } 

手方法:

public async Task DeleteAsync(MaterialCustomer model, CancellationToken cancellationToken = default(CancellationToken)) 
    { 
     if (model == null) 
      throw new ArgumentNullException(nameof(model)); 

     await _materialCustomerDeleter.DeleteAsync(new TblMaterialCustomer { MaterialCustomerId = model.MaterialCustomerId }, cancellationToken); 

     if (cancellationToken.IsCancellationRequested) 
      return; 

     await _customerWriter.CommitAsync(cancellationToken); 
    } 

最后,我的存储库方法:

public async Task DeleteAsync(TblMaterialCustomer entity, CancellationToken cancellationToken = new CancellationToken()) 
    { 
     var item = 
      await _context.TblMaterialCustomer.FirstOrDefaultAsync(i => i.MaterialCustomerId == entity.MaterialCustomerId, cancellationToken); 

     if (item == null || cancellationToken.IsCancellationRequested) 
      return; 

     _context.SetModified(item); 

    } 

我错过了什么?

+0

什么是'_context.SetModified'?为什么不在DbSet上“删除”?您还应该调用SaveAsync来保存更改。你也许应该返回一个类似于200的web api/mvc方法的结果。 – Igor

+0

@Igor我的SetModified方法'public virtual void SetModified (T entity)其中T:class if(Entry(entity).State!= EntityState.Modified) Entry(entity).State = EntityState.Modified; }'在一个枚举中设置EntityState,其中2 =已删除,3 =已修改 – CodyCS

假设await _customerWriter.CommitAsync(cancellationToken);调用都通过相同的的DbContext实例,并调用方法SaveAsync你应该重新写的删除方法是这样的:

public void Delete(TblMaterialCustomer entity) 
{ 
    _context.TblMaterialCustomer.Remove(entity); 
} 

而且它很可能是一个好主意,返回从结果WebAPI调用,尽管它不是必需的,如OK/200。

public async Task<IHttpActionResult> Delete(int customerId, int materialCustomerId) 
{ 
    await _materialCustomerDeleter.DeleteAsync(MaterialCustomer.CreateWithOnlyId(materialCustomerId), HttpContext.RequestAborted); 
    return Ok(); 
}