2014-02-13 4 views
0

사용자가 이메일을 변경하도록 허용하고 있지만 데이터베이스를 업데이트하려고 할 때 예외가 발생합니다. 지정된 메소드는 지원되지 않습니다.MVC Membership.UpdateUser (u); 지정된 메소드가 지원되지 않습니다

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult ManageEmail(LocalEmailModel model) 
{ 
    //UserProfile u = new UserProfile(); 

    if (ModelState.IsValid) 
    { 
     bool TryPasswordNow; 
     var user = Membership.GetUser(User.Identity.Name); 

     MembershipUser u = Membership.GetUser(User.Identity.Name); 

     try 
     { 
      TryPasswordNow = WebSecurity.ChangePassword(User.Identity.Name, model.OldPassword, model.OldPassword); 
     } 

     catch (Exception) 
     { 
      TryPasswordNow = false; 
     } 

     if (TryPasswordNow == true) 
     { 
      user.Email = model.NewEmail; 
      db.SaveChanges(); 

      u.Email = model.NewEmail; 
      Membership.UpdateUser(u); 
     } 

     return RedirectToAction("Manage", "Account"); 
    } 
    return RedirectToAction("Manage", "Account"); 
} 

필자가 보았 듯이 ive는 db.savechanges와 membership.updateuser를 시도했습니다. 첫 번째는 통과하지만 이메일을 변경하지 않으며 두 번째 것은 예외입니다. 이 두 가지 모두 작동해야합니까? 내 변경 사항이 등록되지 않은 이유는 무엇입니까? 감사합니다.

답변

0

SimpleMembership 공급자 (web.config 확인)를 사용하는 경우이 질문은 아마도 duplicate of another question 일 것입니다.

그냥 조금 확장하면 SaveChanges() 호출이 통과되는 이유는 Entity Framework에서 MembershipUser 개체를 추적하지 않아서 데이터베이스에 아무런 영향을 미치지 않기 때문입니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 알았지 만 db.saveChanges()를 사용해서는 안됩니다. 내 변경 사항을 저장 하시겠습니까? – Reft

+0

이 경우가 아닙니다 - MembershipUser ("user"변수를 통해 저장하려고하는 객체)는 엔티티 프레임 워크에서 추적하는 엔티티가 아닙니다. 다른 객체와 마찬가지로 객체이므로 SaveChanges()와 관련이 있습니다 , 변경할 것이 없다. – rfernandes

관련 문제