2017-10-05 7 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."; 
     } 
    } 

EDIT:mUsuario.BuscarUsuarioメソッドは、データベースからのセッションで、現在のユーザーのID名を使用してロードされたすべてのことの価値観を持つUsuario型のオブジェクトを返すために使用されます。

解決済み:デビッドの答えは正しいですが、私が行ったことはbuscarUsuarioメソッドをdbcontextの内部に持っていくことでした。

public USUARIOS BuscarUsuario(int id) 
    { 
     try 
     { 
      db = new BdContext(); 
      USUARIOS usuario = db.USUARIOS.Find(id); 
      db.Dispose(); 
      return usuario; 
     } 
     catch(Exception ex) 
     { 
      throw ex; 
     } 
    } 

だからではなく、私は私のdbcontextの「usuario」をもたらすために.Findメソッドを使用するオブジェクトをカプセル化するためにそれを使用する:これはBuscarUsuarioのコードだった

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は、ヘルパーオブジェクト/メソッド/ etcにあるデータベース操作をカプセル化しようとする試みになりそうです。ある種のしかし、起こっているように見えるのは、カプセル化がデータコンテキスト自体をカプセル化しているということです。そのオブジェクトを引き続き使用したい場合は、そのオブジェクトは何らかの形で操作を公開して、のデータコンテキストを呼び出す必要があります。

基本的に、2つの異なるデータコンテキストは、お互いのオブジェクトについて知りません。

+0

ありがとう、@ David!それは実際に働いた。私は決議で質問を更新します。 – William

関連する問題