2017-01-03 1 views
1

저는 asp.net.mvc를 가르치려고합니다. MVC 용 기본 템플릿을 사용하여 프로젝트를 시작했습니다. 템플릿을 조금 변경 했으므로 기본 동작 방법으로 등록 할 때 새로 등록 된 사용자 ID를 companies이라는 다른 테이블에 추가합니다.테이블의 열을 업데이트 할 수 없습니다.

기본적으로 프런트 엔드에 새 텍스트 필드를 추가했습니다. 사용자가 등록 할 때 숫자를 입력합니다. 백엔드에서 나는 companies 테이블에서 회사를 찾고 ID는 앞면과 일치합니다. 여기

public async Task<ActionResult> RegisterCA(RegisterCAEViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     if (result.Succeeded) 
     { 
      var currentUser = UserManager.FindByName(user.UserName); 

      var roleresult = UserManager.AddToRole(currentUser.Id, "CompanyAdministrator"); 


      await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 

      var company = db.Companies.Find(model.CompanyCode); 
      // find the company by the id passed in the frontend. 
      if (company!=null) 
      { 
       company.CAId = currentUser.Id; 
       //set the id 
       db.Entry(company).State = EntityState.Modified; 
       db.SaveChanges(); 
      } 
       return RedirectToAction("Index", "Home"); 
     } 
     AddErrors(result); 
    } 
    return View(model); 
} 

: 일치가 있으면 내가 여기

CAID

라는 회사 테이블의 컬럼에 현재 사용자 ID를 저장하고자하는 모든 행동 방법이다 (필자는 await 후 내 수정 한) 나는 위의 방법으로 뭘하려 :

    var company = db.Companies.Find(model.CompanyCode); 
        // find the company by the id passed in the frontend. 
        if (company!=null) 
        { 
        company.CAId = currentUser.Id; 
        //set the id 
        db.Entry(company).State = EntityState.Modified; 
        db.SaveChanges(); 

내가 오류를하지 않는 사용자를 등록합니다. 사용자는 등록되었지만 CAId 필드는 새로 등록 된 사용자 ID로 갱신되지 않습니다.

제발, 누군가 도와 줄 수있어! 내가 시간 :(이 붙어 있었어요로 나는 매우 감사하게 될 것입니다.

내 생각 엔, 당신은 세트를 기본 컨텍스트에 엔티티를 연결해야
+0

'Find' 메소드가 이미 추적 된 엔티티를 리턴하므로, 상태를 수정할 필요가 없습니다. 상태를 수정하지 않으면'SaveChanges' 바로 전에 어떤 상태입니까? – Crowcoder

+0

질문을 이해할 수 있는지 모르겠지만 CAId의 기본 상태는 null입니다. –

+0

신경 쓰지 마세요, 마이클 베레진이 옳다고 생각합니다. – Crowcoder

답변

0

미래에 비슷한 질문에 대한 답변을 찾는 사람은 누구나입니다. 제 질문의 코드는 아무 문제없이 작동합니다. 문제는보기에서 내가 기본 등록 동작 방법을 사용하고 있었고 위에 수정 된 것이 아니 었습니다! 도움을 청한 모든 사람들에게 감사드립니다!

-1

.
dbSet.Attach (기업)

(선 후 db.SaveChanges을 , company.CAId = currentUser.Id : 다음 context.Entry (기업) .STATE = EntityState.Modified; db.SaveChanges는()

+0

고마워,하지만 그건 작동하지 않았다. –

+0

레코드를 검색 할 때 AsNoTracking을 사용하십시오. 예를 들어 dbSet.AsNoTracking(). FirstOrDefault (expression) 및 컨텍스트에 엔티티를 업데이트 할 때 – Nonik

+0

의미가 없습니다. 'db.Companies.Find'는 회사를 연결합니다. 그리고 처음에는 'AsNotracking'으로 가져 오는 것이 쓸모가 없습니다. –

0

이 라인을 이동하십시오); currentauser id는 설정 될 식별 컬럼입니다 DB에 저장된 후에 만

+0

나는 이것을 시도했지만 작동하지 않았다. 나는 현재 사용자를 믿는다.ID가 올바르게 이해되면 코드의 일부 앞에 ID가 설정됩니다. –

+0

의미가 없습니다. 'currentuser'는 기존 엔티티입니다. 그것은 만들어지지 않았습니다. 그리고 어떻게 '회사'가 구원 받습니까? –

+0

글쎄, 결과 변수를 사용하여 ID를 가져와야 할 수도 있습니다 (ID 열이 일반적으로 생성 작업 후에 반환 된 경우) (var result = UserManager.CreateAsync (user, model.Password);) –

관련 문제