asp.net核心删除一定数量的所有内容

时间:2017-12-28 20:05:35

标签: asp.net-core-2.0

我想用classID删除所有vragen(英文问题),例如5号。可以提供vraagID和classID,如果匹配,服务器会删除问题。但我想只用一个请求删除所有匹配的问题。这可能吗?

    namespace AspIdentityServer.data
    {
        public class Vraag :Conversatie
        {
            public int VraagID { get; set; }
            public int classID { get; set; }
            public string Titel { get; set; }

            public ICollection<Antwoord> Antwoord { get; set; }
            public Vak Vak { get; set; }
        }
    } 

-

      // DELETE: api/Vraags/1/alles/5
                [AllowAnonymous]
                [HttpDelete("{id}/alles/{vakID}")]
                public async Task<IActionResult> DeleteAlleVragen([FromRoute] int id, int vakID) {
                    if (!ModelState.IsValid)
                    {
                        return BadRequest(ModelState);
                    }
                    var vraag = await _context.Vraag.SingleOrDefaultAsync(m => m.VraagID == id);

                    if (vraag.classID == vakID)
                    {
                        _context.Vraag.Remove(vraag);
                        await _context.SaveChangesAsync();
                    }
                    return Ok(vraag);
            }

1 个答案:

答案 0 :(得分:0)

您始终可以使用ExecuteSqlCommandAsync执行自定义SQL查询。因此,使用适当的where子句编写单个delete语句,该子句将根据需要处理许多行。

这是一个简单的例子

object[] paramsArray =
{
    new SqlParameter
    {
        ParameterName = "@vraagId",
        SqlDbType = SqlDbType.Int,
        Value = id
    },
    new SqlParameter
    {
        ParameterName = "@classId",
        SqlDbType = SqlDbType.Int,
        Value = vakID
    }
};
const string q = "DELETE FROM VraagWHERE VraagID=@vraagId and ClassId=@classId";
await _context.Database.ExecuteSqlCommandAsync(q, paramsArray);

根据需要更新SQL statemenets和参数。