2017-10-05 2 views
0

Ich versuche, eine Tabelle mit Entity zu aktualisieren. Die neuen Daten werden innerhalb usu_login und usu_senha bekommen, aber wenn der Code SaveChanges(); Bit bekommt, funktioniert es nicht wirklich. Fehle ich etwas? Warum tritt das Update nicht auf? Ich habe versucht, einen neuen Benutzer mit den neuen Daten einzufügen, und das funktioniert tatsächlich, nur das Update bereitet mir Schwierigkeiten.Aktualisieren Tabelle mit Entität funktioniert nicht

[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: die mUsuario.BuscarUsuario Methode wird aus der Datenbank des Usuario Typs ein Objekt zurück mit allen seinen Werten, die Identität Namen des Benutzers geladen verwenden, die zur Zeit in der Sitzung ist.

Gelöst: David Antwort war richtig, was ich getan habe, war die buscarUsuario Methode innerhalb des dbcontext bringen. Dies war der Code für die 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; 
     } 
    } 

Anstatt also benutze es nur ein Objekt ich die .Find Methode zum Einkapseln mir bringen eine ‚usuario‘ im DbContext:

USUARIOS usuario = dbcontext.USUARIOS.Find(int.Parse(HttpContext.User.Identity.Name)); 
+0

Können Sie erklären, was 'USUARIOS usuario = mUsuario ....' Linie tun? – Redouane

+0

@Redouane hat gerade die Frage aktualisiert. – William

+0

Die Antwort von @David unten ist, was ich dachte, um zu schreiben. Anscheinend müssen Sie SaveChanges() für die DbContext-Instanz aufrufen, die von 'mUsuario' verwendet wird. Mit anderen Worten, ich meine, die gleiche Kontextinstanz, die zum Abrufen von Daten verwendet wird, muss verwendet werden, um SaveChanges() aufzurufen, nachdem Sie die Daten geändert haben. – Redouane

Antwort

0

Was ist mUsuario.BuscarUsuario()? Es scheint in keiner Weise mit Ihrem Datenkontext zu tun zu haben. Im Wesentlichen, was Sie tun, ist Instanziieren eines Datenkontextes, nichts darin verwenden, und dann speichern. Was den Datenkontext betrifft, so gibt es keine Änderungen zum Speichern.

Nicht vertraut mit der Muttersprache in diesem Code (Portugiesisch?), Werde ich Platzhalternamen verwenden. Aber im Wesentlichen benötigen Sie das Modell aus dem Datenkontext. Etwas wie:

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

Vermutlich mUsuario sieht ein Versuch sein, um Datenbankoperationen in einem Hilfsobjekt/Verfahren/etc einzukapseln. irgendwie. Es scheint aber so zu sein, dass die Kapselung auch den Datenkontext selbst kapselt. Wenn Sie dieses Objekt weiterhin verwenden möchten, muss dieses Objekt in irgendeiner Weise den Vorgang offenlegen, um .SaveChanges() unter seinen Datenkontext aufzurufen.

Grundsätzlich kennen zwei verschiedene Datenkontexte nichts über die Objekte des jeweils anderen.

+0

Danke, @ David! Es hat tatsächlich funktioniert. Ich werde meine Frage mit der Auflösung aktualisieren. – William

Verwandte Themen