使用实体更新表不起作用

时间:2017-10-05 13:31:35

标签: c# database entity

我尝试使用实体更新表格。新数据进入usu_loginusu_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));

1 个答案:

答案 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()

基本上,两个不同的数据上下文不了解彼此的对象。