2016-07-13 2 views
0

엔티티 프레임 워크 코드를 사용하여 ASP.NET MVC 프로젝트를 처음으로 개발 중입니다. 하지만 데이터베이스에 새 데이터를 삽입 할 때 관련된 데이터가 업데이트되는 문제가 있습니다. 아래의 시나리오를 참조하십시오.엔티티 프레임 워크에서 이전에 검색된 관련 엔티티가 업데이트되지 않도록하십시오.

은 내가 당신이 볼 수 있듯이 내가 컨트롤러 액션

public ActionResult Post(ViewModel model) 
    { 
     User user = repo.User(model.UserId); 
     //Do a lot of stuffs with user object 
     //Eg I changed country 
     user.Country = "Just a temporary country. This should not be changed in database"; 
     . 
     . 
     //Then create an account 
     repo.CreateAccount(user,model.Balance); 
     return View(); 
    } 

이 같은 일을하고

public User User(int id) 
{ 
    return context.Users.Find(id); 
} 

public Account CreateAccount(User user,decimal balance) 
{ 
    Account ac = new Account{ 
     Balance = 5000, 
     UserId = user.id 
    }; 
    context.Accounts.Add(ac); 
    context.SaveChanges(); 
} 

저장소에서이 방법이이

User{ 
    public int Id{ get;set; } 
    public string Name{ get;set; } 
    public string Country { get;set; } 
} 

Account{ 
    public int Id{ get;set; } 
    public decimal Balance { get;set; } 
    public int UserId { get;set } 

    public virtual User User; 
} 

같은 유사한 기관이 위에서 계정을 만들기 전에 국가를 변경했습니다. 그러나 계정을 만들 때 데이터베이스의 국가 값도 변경되었습니다. 이것은 내 문제에 대한 간단한 예일뿐입니다. 그래서 제 질문은 다른 관련 엔터티를 만들 때 이전에 검색된 관련 엔터티를 업데이트하지 못하도록 엔터티 프레임 워크를 중지 할 수 있습니까? 내 예에서는 사용자 계정을 만들 때 국가 이름이 업데이트되지 않습니다. 제발 가능하니? 가능한 경우 어떻게받을 수 있습니까?

+0

어딘가에 사용자를 변경하지 않고 표시해야합니다. 이러한 모든 저장소 계층에는 어디서해야하는지 잘 모릅니다. 모든 저장소가 동일한'context' 인스턴스를 사용하는지는 명확하지 않습니다. (좋은 것처럼 보입니다.) 왜 저장소가'SaveChanges'를 호출하는지 이해하지 못합니다; 그것은 매우 불편합니다. 또한, 저장되지 않은 동안 왜 "많은 것들"을합니까? –

+0

의존성 주입을 위해 Ninject를 사용하고 있기 때문에 저장소에 SaveChanges를 수행하고 있습니다. –

+0

사용자를 변경되지 않은 것으로 표시하는 방법은 무엇입니까? 예 : context.Users.Unchanged(). 나는 그것을위한 어떤 방법도 보지 못한다. –

답변

1

이 같은 통화의 createAccount 방법 이전 또는에서 사용자 개체를 분리 할 수 ​​있습니다 :이

public User User(int id) 
{ 
    return context.Users.Where(e=>e.Id == id) 
     .AsNoTracking().FirstOrDefault(id); 
} 

같은

context.Entry(user).State = EntityState.Detached; 

또는 AsNoTracking에서 REPO 사용 방법 사용

, 언제든지 원하는 사용자가 업데이트를 위해 명시 적으로 업데이트하는 방법을 사용하십시오.

context.Entry(user).State = EntityState.Modified; 
+0

감사합니다. 그게 내 문제를 해결해 줬어. –

관련 문제