2017-10-05 1 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 방법은 세션에서 현재의 사용자의 ID 이름을 사용하여로드 된 모든 그것의 값을 데이터베이스에서 사용자 선호도 유형의 개체를 반환하는 데 사용됩니다.

솔직히 : 데이빗 대답이 정확했습니다. dbcontext 내부에 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

은 무엇인가 : 그냥이 dbcontext에 나에게 '사용자 선호도'를 가져 오기 위하여 .Find 방법을 사용하여 객체를 캡슐화하는

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

그래서 대신에 그것을 사용 :이하여 BuscarUsuario에 대한 코드했다 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는 등 도우미 개체/방법 /에서 데이터베이스 작업을 캡슐화하기위한 시도로 보인다. 어떤 종류의. 그러나 캡슐화가 데이터 컨텍스트 자체를 캡슐화하고 있다는 사실이 발생합니다. 해당 객체를 계속 사용하려면 해당 객체가 어떤 식 으로든 을 데이터 컨텍스트에 호출해야합니다.

기본적으로 서로 다른 두 데이터 컨텍스트는 서로의 개체를 알지 못합니다.

+0

고마워요, @ 데이비드! 그것은 실제로 효과가있었습니다. 내 질문을 해결책으로 업데이트하겠습니다. – William

관련 문제