1

嘿伙计们,我很好奇如何在数据库中一次只更新一列。当我运行诸如邮递员或小提琴之类的东西来查询放入我的数据库时。如果我只包含一个字段,它会将所有其他字段 = 设置为 null。无论如何,当我查询 PUT 时,我是否可以将其他字段留空,并且它只会更改我要求 PUT 更新的一个字段?抱歉,如果我的解释不好,我是使用 API 的新手。

这是我的 PUT 方法(基本脚手架):

public IHttpActionResult PutUser(int id, User user)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }


            if (id != user.Id)
            {
                return BadRequest();
            }

            db.Entry(user).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }

当我想更新时,只说名字,并且数据库中已经有名字和姓氏。在 PUT 方法之后,姓氏将设置为空。所以我调试并注意到它在参数中接收的用户已经将姓氏设置为空。任何建议将不胜感激!

4

1 回答 1

1

我猜您正在发送一个空白用户,其中仅包含您要更新的列中的信息。那么您应该首先阅读用户详细信息,然后根据需要更改列/字段,然后将此新用户对象发送回 API Put 方法

编辑 基本上,您不能真正指定使用此 API 模式更新的单个列/字段。查看您的构造函数,没有参数可以告诉代码您要更新哪一列。(你可以测试空值,但我强烈建议不要这样做)。您的代码告诉 EntityFramework 使用您提供的 User 对象更新数据库。因此,您需要首先检索您想要更新的用户(使用 GET),并且只更改您想要更改的字段,然后将更新后的 User 对象发送回 API Put 方法。如果您发送一个带有 NULL 值的 User 对象,那么这些 NULL 值将被保存到数据库中。

如果您真的希望能够指定列,您可以编写单独的 PUT 方法重载,它只会更新您想要的列。然而,以这种方式编程需要更多的努力和更多的维护,我建议不要这样做。

于 2014-03-11T22:34:32.417 回答