【问题标题】:ASP.NET Web API DELETE method errorASP.NET Web API DELETE 方法错误
【发布时间】:2017-12-13 03:04:28
【问题描述】:

使用带有实体框架的 ASP.NET Web API DELETE 方法来传递学生 id,如果 id 存在于表中,则删除记录。当我尝试对其进行测试时,我收到以下错误消息

“System.Data.Entity.Utilities.Check.NotNull[T](T value, String parameterName) System.Data.Entity.DbContext.Entry[TEntity](TEntity entity)”

public class StudentController : ApiController
{
    [HttpDelete]
    [Route("student/DeleteStudent/{id}")]

    public IHttpActionResult DeleteStudent(string id)
    {
        using (var sd = new SchoolDBEntities())
        {
            var student = sd.Students
                .Where(s => s.StudentID == id)
                .FirstOrDefault();

            sd.Entry(student).State = System.Data.Entity.EntityState.Deleted;
            sd.SaveChanges();
        }
        if (id == null)
        return BadRequest("Not a valid student id");

        return Ok();
    }
}

【问题讨论】:

  • 检查我的答案是否需要在执行删除操作之前完成 (id == null)...
  • 请接受/支持它对你有用的答案

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

您应该检查学生是否存在;

        var student = sd.Students
            .Where(s => s.StudentID == id)
            .FirstOrDefault();
        if (student != null)
        {
            sd.Entry(student).State = System.Data.Entity.EntityState.Deleted;
            sd.SaveChanges();
        }

【讨论】:

    【解决方案2】:

    另一件事是方法应该很快失败,所以在你的情况下,所以首先检查 null id 也可以解决你的问题,检查下面的代码

    public IHttpActionResult DeleteStudent(string id)
     {
       if (id == null)
         return BadRequest("Not a valid student id");
           var student = sd.Students
                    .Where(s => s.StudentID == id)
                    .SingleOrDeault();
        if(student!=null)
        {
          //perform operation
        }    
        return Ok();
    }
    

    您希望只有一名学生拥有 ID,因为 ID 是主键 这是你应该使用SingleOrDeault()的增量数字,不要使用FirstOrDefault(),因为不能有更多具有相同ID的学生

    var student = sd.Students
                .Where(s => s.StudentID == id)
                .SingleOrDeault();
    if(student!=null)
    {
      //perform operation
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 2014-11-30
      • 2016-01-08
      • 1970-01-01
      • 2017-12-04
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多