如何使用2个主键从db表中删除行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用2个主键从db表中删除行相关的知识,希望对你有一定的参考价值。

我是新的在Web应用程序上使用MVC C#...我在删除数据库中的一行时遇到麻烦...结果是“HTTP错误400.0 - 错误请求”

当表只有1个主键时,我不会收到此错误。

控制器:

// GET: DocenteCursoes/Delete/5
    public ActionResult Delete(string curso, string docente)
    {
        if (curso == null && docente == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        DocenteCurso docenteCurso = db.DocenteCurso.Find(curso, docente);
        if (docenteCurso == null)
        {
            return HttpNotFound();
        }
        return View(docenteCurso);
    }

    // POST: DocenteCursoes/Delete/5
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(string curso, string docente)
    {
        DocenteCurso docenteCurso = db.DocenteCurso.Find(curso, docente);
        db.DocenteCurso.Remove(docenteCurso);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

模型:

[Table("DocenteCurso")]
public partial class DocenteCurso
{
    [Key]
    [Column(Order = 0)]
    [StringLength(50)]
    public string Curso { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(50)]
    public string Docente { get; set; }
}

视图:

@using (html.BeginForm()) {
    @Html.AntiForgeryToken()

    <div class="form-actions no-color">
        <input type="submit" value="Delete" class="btn btn-default" /> |
        @Html.ActionLink("Back to List", "Index")
    </div>
}
答案

很可能你因为这种情况而得到BadRequest

if (curso == null && docente == null)
{
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}

这与您的实体具有复合主键无关。确保您正在调用正确的控制器操作。

请注意,没有参数的Html.BeginForm()会将HTTP POST发送到当前URL。

另一答案

好的,让我们从构造良好的URL开始,如下所示:

http://yourserver/DocenteCursoes/Delete?curso=firstparam&docente=secondparam

首先在Internet浏览器中尝试,然后告诉我是否可以摆脱404错误。

另一答案

视图:

@using (Html.BeginForm(null, null, new { curso = Model.Curso, docente = Model.Docente })) 
{
    @Html.AntiForgeryToken()

    <div class="form-actions no-color">
        <input type="submit" value="Delete" class="btn btn-default" /> |
        @Html.ActionLink("Back to List", "Index")
    </div>
}

以上是关于如何使用2个主键从db表中删除行的主要内容,如果未能解决你的问题,请参考以下文章

使用外键从表中删除

如何识别任何 Mysql 数据库表中的复合主键?

如何通过键从 GAE 数据存储中删除多个实体

如何使用外键从 2 个表中获取所有数据

如何通过主键从表排序中进行选择

删除阻止插入