我想用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);
}
答案 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和参数。