엔티티 프레임 워크 코드를 사용하여 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;
}
같은 유사한 기관이 위에서 계정을 만들기 전에 국가를 변경했습니다. 그러나 계정을 만들 때 데이터베이스의 국가 값도 변경되었습니다. 이것은 내 문제에 대한 간단한 예일뿐입니다. 그래서 제 질문은 다른 관련 엔터티를 만들 때 이전에 검색된 관련 엔터티를 업데이트하지 못하도록 엔터티 프레임 워크를 중지 할 수 있습니까? 내 예에서는 사용자 계정을 만들 때 국가 이름이 업데이트되지 않습니다. 제발 가능하니? 가능한 경우 어떻게받을 수 있습니까?
어딘가에 사용자를 변경하지 않고 표시해야합니다. 이러한 모든 저장소 계층에는 어디서해야하는지 잘 모릅니다. 모든 저장소가 동일한'context' 인스턴스를 사용하는지는 명확하지 않습니다. (좋은 것처럼 보입니다.) 왜 저장소가'SaveChanges'를 호출하는지 이해하지 못합니다; 그것은 매우 불편합니다. 또한, 저장되지 않은 동안 왜 "많은 것들"을합니까? –
의존성 주입을 위해 Ninject를 사용하고 있기 때문에 저장소에 SaveChanges를 수행하고 있습니다. –
사용자를 변경되지 않은 것으로 표시하는 방법은 무엇입니까? 예 : context.Users.Unchanged(). 나는 그것을위한 어떤 방법도 보지 못한다. –