여기 상황이다, 나는 다음과 같은 관계를 맺고있는 세 가지 요소를 가지고있다. 그러나 편집 메서드를 만들려고하면 부모 개체 만 수정 한 후에 저장됩니다. 내가 지금까지 가지고있는 것을 아래에서 보라.EF 5 N 레벨 딥 개체 그래프 업데이트 중? 나는 문제없이 이러한 개체를 생성, 추가 및 저장 관리해야</p> <pre><code>-Team one-to-one TeamContact -TeamContact one-to-one TeamAddress </code></pre> <p>:
내 DB 클래스의 저장 방법
public void SaveTeam(Team team)
{
if (team.Id == 0)
{
context.Teams.Add(team);
}
else
{
var model = context.Teams.Find(team.Id);
context.Entry(model).CurrentValues.SetValues(team);
}
context.SaveChanges();
}
편집 방법
[HttpGet]
public ActionResult Edit(int id)
{
var model = _dataSource.Teams.FirstOrDefault(t => t.Id == id);
return View(model);
}
[HttpPost]
public ActionResult Edit(Team team)
{
if (ModelState.IsValid)
{
_dataSource.SaveTeam(team);
return RedirectToAction("Detail", "Team", new { id = team.Id });
}
return View(team);
}
내가 내가 내가 부모 개체를 수정할 수 있습니다 만 무엇을, 위에서 말했듯이, 내가 놓친 무슨이 이리?
Violation of PRIMARY KEY constraint 'PK_dbo.TeamAddresses'. Cannot insert duplicate key in object 'dbo.TeamAddresses'. The duplicate key value is (5).
The statement has been terminated.
결론은 어떻게합니까 하나의 업데이트 N 수준 깊은 객체 :
는내가 위를 시도한 후이 오류가 발생했습니다
public void SaveTeam(Team team)
{
if (team.Id == 0)
{
context.Teams.Add(team);
}
else
{
//var model = context.Teams.Find(team.Id);
var model = context.Teams.Include(c => c.TeamContact).Single(t => t.Id == team.Id);
context.Entry(model).CurrentValues.SetValues(team);
model.TeamContact = team.TeamContact;
}
context.SaveChanges();
}
을 시도 ?
설명의 요점. 주석 처리 된 행은 오브젝트를 갱신하지 않습니다. 오히려 데이터베이스에서로드하여 컨텍스트로 등록합니다. EF로 하여금 그들이 바뀌 었음을 깨닫게하고 그에 따라 업데이트하는 것은 등록입니다. –