2017-10-05 29 views
0

我試圖使用實體更新表。新數據進入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類型的對象返回它的所有使用這就是在當前會話的用戶身份名稱加載的值。

解決:大衛的答案是正確的,我所做的就是將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

你能解釋一下'USUARIOS usuario = mUsuario ....'這行嗎? – Redouane

+0

@Redouane剛剛更新了這個問題。 – William

+0

下面@David的答案是我想寫的。看起來你需要在'mUsuario'使用的DbContext實例上調用SaveChanges()。換句話說,我的意思是在修改數據後,必須使用用於檢索數據的相同上下文實例來調用SaveChanges()。 – Redouane

回答

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

基本上,兩個不同的數據上下文不知道彼此的對象。

+0

謝謝@David!它實際上工作。我會用決議更新我的問題。 – William