如何更新用户

本文关键字:用户 更新 何更新 | 更新日期: 2023-09-27 18:28:44

目标

一致地更新用户的表。

问题

我必须编辑特定用户的信息,但我不知道如何编辑。

  • 首先,在我的应用程序上有一个Users表,它存储了某个用户的所有信息。

  • 其次,我不能用递归的方式来思考这个问题。Users表上有多个列,我不知道如何只编辑用户请求的列知道吗

我真正想要的是什么

我没有通过C#执行任何查询。我从数据库中需要的一切都是通过存储过程实现的。(除了基本的.Select()FirstOrDefault()等)。换句话说,我需要两样东西:

  1. 一种(MySQL)递归查询语法思想
  2. 我需要一个C#方法来调用我的存储过程,如下所示:

User user = new User("chiefmaster@test.com"); // The target of the update.
UpdateUser
    (user.Email => "masterchief@test.com", // the old is "chiefmaster@test.com"
     user.Nickname => "MasterChief" // the old is "ChiefMaster");

正如您所看到的,我正在更新特定用户的EmailNickname——这不应该影响其他用户的信息。

你能给我一些想法或方法吗?

如何更新用户

有很多方法可以解决这个问题,你尝试过什么?例如,您可以使用ORM,它为您处理此问题。

您还可以手动实现每个属性的脏标志,并只保存更改后的属性。

或者您可以创建一个方法UpdateUserEmailAndNickname(User user, string newEmail, string newNickname)

我建议您创建一个存储过程,当接收到空参数"时,它会保留以前的值

create procedure UpdateUser(IN idUpdate INT, IN newEmail varchar(30), IN newNick varchar(30))
begin
DECLARE prevEmail varchar(30);
DECLARE prevNick varchar(30);
DECLARE updEmail varchar(30);
DECLARE updNick varchar(30);
select email into prevEmail, nick into prevNick 
from USERS 
where id = idUpdate
if(newEmail = '')
    set updEmail = prevEmail
else
    set updEmail = newEmail
if(newNick = '')
    set updNick = prevNick
else
    set updNick = newNick
update USERS 
set email = updEmail, nick = updNick
where id = idUpdate;
end;

当您调用此过程时,您需要传递所有参数,但当您检测到列没有更新时,只需将其作为空字符串(或调整存储过程的空值)传递

当然,您需要根据需要添加更多的参数,声明更多的变量,并调整这个示例