I am using EF 6, MVC 4 (or 5) and trying to update a relationship between my 2 entities that have an independent association set up thus
public class Activity{
public int ID {get;set;}
public string Description{get;set;}
public ActivityGroup ActivityGroup{get;set;}
}
public class ActivityGroup{
public int ID{get;set;}
public string Description{get;set;}
public ICollection<Activity> Activities{get;set;}
}
in my save/edit action method, I cannot seem to get the relationship to update
[HttpGet]
public ActionResult Edit(int id = 0)
{
EditActivityVM model = new EditActivityVM();
model.Activity = db.Activities.Include(a => a.ActivityGroup).SingleOrDefault(a => a.ID == id);
if (model.Activity == null)
{
return HttpNotFound(string.Format("Activity with ID: {0} not found", id.ToString()));
}
model.ActivityGroups = db.ActivityGroups.ToList();
return View(model);
}
[HttpPost]
public ActionResult Edit(EditActivityVM activity){
if(ModelState.IsValid){
db.Entry(model.Activity).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
}
public class EditActivityVM{
public ICollection<ActivityGroup> ActivityGroups{get;set;}
public Activity Activity{get;set;}
}
@model EditActivityVM
@Html.HiddenFor(m => m.Activity.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Activity.ActivityGroup.ID)
</div>
<div class="editor-field">
@Html.DropDownListFor(m => m.Activity.ActivityGroup.ID, Model.ActivityGroups.Select(ag => new SelectListItem { Text = ag.Description, Value = ag.ID.ToString() }), "Select Group", null)
@Html.ValidationMessageFor(model => model.Activity.ActivityGroup.ID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Activity.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Activity.Description)
@Html.ValidationMessageFor(model => model.Activity.Description)
</div>
the problem is, that when savechanges is called i either get a concurrency problem or the ActivityGroup simply doesnt update. I know I could add an FK into the class, but really would rather not. surely there must be a way to get this to work? does EF simply not handle this?