使用实体更新 table 不起作用
Updating table with entity does not work
我正在尝试使用实体更新 table。新数据进入 usu_login
和 usu_senha
,但是当代码到达 SaveChanges();
位时它实际上不起作用。我错过了什么吗?为什么更新没有发生?我尝试用新数据插入一个新用户,这确实有效,只是更新让我很困难。
[Authorize]
[HttpPost]
public string AtualizarCredenciais(string usu_senha, string usu_login)
{
try
{
//Busca o usuário com o ID de sessão.
USUARIOS usuario = mUsuario.BuscarUsuario(int.Parse(HttpContext.User.Identity.Name));
//Cria uma instância de contexto do banco.
BdContext dbcontext = new BdContext();
//Mudança de senha e usuário pro novo usuário.
usuario.USU_LOGIN = usu_login;
usuario.USU_SENHA = usu_senha;
dbcontext.SaveChanges();
return "Credenciais atualizadas.";
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
return "Erro na atualização de credenciais.";
}
}
EDIT:mUsuario.BuscarUsuario 方法用于从数据库中 return Usuario 类型的对象,其所有值都使用身份名称加载当前正在会话中的用户数。
已解决: David 的回答是正确的,我所做的是将 buscarUsuario
方法引入到 dbcontext 中。这是 BuscarUsuario
的代码:
public USUARIOS BuscarUsuario(int id)
{
try
{
db = new BdContext();
USUARIOS usuario = db.USUARIOS.Find(id);
db.Dispose();
return usuario;
}
catch(Exception ex)
{
throw ex;
}
}
因此,我没有使用它来封装一个对象,而是使用 .Find
方法在 dbcontext 中为我带来了一个 'usuario':
USUARIOS usuario = dbcontext.USUARIOS.Find(int.Parse(HttpContext.User.Identity.Name));
什么是mUsuario.BuscarUsuario()
?它似乎与您的数据上下文没有任何关系。本质上,您所做的是实例化数据上下文,不使用其中的任何内容,然后保存。因此,就数据上下文而言,没有要保存的更改。
不熟悉此代码中的本地语言(葡萄牙语?),我将使用占位符名称。但本质上,您需要的是从数据上下文 中获取模型。类似于:
BdContext dbcontext = new BdContext();
USUARIOS usuario = dbcontext.SomeListOfEntities.Single(u => u.SomeID == int.Parse(HttpContext.User.Identity.Name));
// make changes to the "usario" object
dbcontext.SaveChanges();
据推测 mUsuario
看起来是试图将数据库操作封装在助手 object/method/etc 中。某种。但是似乎正在发生的事情是封装也封装了数据上下文本身。如果您想继续使用该对象,那么该对象将不得不以某种方式公开操作以在 its 数据上下文上调用 .SaveChanges()
。
基本上,两个不同的数据上下文不知道彼此的对象。
我正在尝试使用实体更新 table。新数据进入 usu_login
和 usu_senha
,但是当代码到达 SaveChanges();
位时它实际上不起作用。我错过了什么吗?为什么更新没有发生?我尝试用新数据插入一个新用户,这确实有效,只是更新让我很困难。
[Authorize]
[HttpPost]
public string AtualizarCredenciais(string usu_senha, string usu_login)
{
try
{
//Busca o usuário com o ID de sessão.
USUARIOS usuario = mUsuario.BuscarUsuario(int.Parse(HttpContext.User.Identity.Name));
//Cria uma instância de contexto do banco.
BdContext dbcontext = new BdContext();
//Mudança de senha e usuário pro novo usuário.
usuario.USU_LOGIN = usu_login;
usuario.USU_SENHA = usu_senha;
dbcontext.SaveChanges();
return "Credenciais atualizadas.";
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
return "Erro na atualização de credenciais.";
}
}
EDIT:mUsuario.BuscarUsuario 方法用于从数据库中 return Usuario 类型的对象,其所有值都使用身份名称加载当前正在会话中的用户数。
已解决: David 的回答是正确的,我所做的是将 buscarUsuario
方法引入到 dbcontext 中。这是 BuscarUsuario
的代码:
public USUARIOS BuscarUsuario(int id)
{
try
{
db = new BdContext();
USUARIOS usuario = db.USUARIOS.Find(id);
db.Dispose();
return usuario;
}
catch(Exception ex)
{
throw ex;
}
}
因此,我没有使用它来封装一个对象,而是使用 .Find
方法在 dbcontext 中为我带来了一个 'usuario':
USUARIOS usuario = dbcontext.USUARIOS.Find(int.Parse(HttpContext.User.Identity.Name));
什么是mUsuario.BuscarUsuario()
?它似乎与您的数据上下文没有任何关系。本质上,您所做的是实例化数据上下文,不使用其中的任何内容,然后保存。因此,就数据上下文而言,没有要保存的更改。
不熟悉此代码中的本地语言(葡萄牙语?),我将使用占位符名称。但本质上,您需要的是从数据上下文 中获取模型。类似于:
BdContext dbcontext = new BdContext();
USUARIOS usuario = dbcontext.SomeListOfEntities.Single(u => u.SomeID == int.Parse(HttpContext.User.Identity.Name));
// make changes to the "usario" object
dbcontext.SaveChanges();
据推测 mUsuario
看起来是试图将数据库操作封装在助手 object/method/etc 中。某种。但是似乎正在发生的事情是封装也封装了数据上下文本身。如果您想继续使用该对象,那么该对象将不得不以某种方式公开操作以在 its 数据上下文上调用 .SaveChanges()
。
基本上,两个不同的数据上下文不知道彼此的对象。