Here is the situation, i have three entities of which has the following relationships:
-Team one-to-one TeamContact
-TeamContact one-to-one TeamAddress
I have managed to create, add and save these objects with no trouble. However, when i tried to create an edit method, only the parent object is being saved after modifications. See below what i have so far;
Save method in my Db class
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();
}
Edit Method
[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);
}
Like i said above, what i have only lets me modify the parent object, what have i missed here?
Tried
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();
}
I got this error after trying the above:
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.
Bottom line, how does one update N-Level deep objects?