我尝试使用实体更新表格。新数据进入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.";
}
}
编辑:mUsuario.BuscarUsuario方法用于从数据库返回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
方法为我带来了一个' usuario'在dbcontext中:
USUARIOS usuario = dbcontext.USUARIOS.Find(int.Parse(HttpContext.User.Identity.Name));
答案 0 :(得分:0)
什么是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
似乎是尝试将数据库操作封装在辅助对象/方法/等中。某种。但似乎正在发生的事情是封装也封装了数据上下文本身。如果您想继续使用该对象,那么该对象将以某种方式暴露该操作以在其数据上下文上调用.SaveChanges()
。
基本上,两个不同的数据上下文不了解彼此的对象。