Я честно искал более часа удовлетворительного ответа на этот вопрос. Так что это не значит, что я не нашел ответов, просто не те, которые я считаю абсолютно правильными. Что может означать, что я ищу серебряную пулю, которой не существует.
В asp mvc с моделью EF (сначала код), которая включает отношение многие ко многим, как мне связать эти отношения с флажками и затем элегантно распространить эти изменения в моей базе данных.
Если представление возвращает только значения для отмеченных флажков, то я больше не знаю, какие значения были проверены ранее. Должен ли я снова извлечь исходный объект, а затем сравнить два? Это кажется грязным, вероятно, потому что я так привык позволять магии EF управлять свойствами, которые изменились на объекте.
У меня уже есть грязная версия, которой я не доволен.
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add insert logic here
Program p = _programRep.GetByID(id);
//manually update properties
//change to model binding later
EditPolicies(ref p, collection["SelectedPolicies"].ToString().Split(','));
_programRep.Save(p);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
private void EditPolicies(ref Program c, string[] selectedvals)
{
//I could do comparison logic here
int count = c.Policies.Count;
for (int i = 0; i < count; i++)
{
c.Policies.Remove(c.Policies.ElementAt(0));
}
for (int i = 0; i < selectedvals.Count(); i++)
{
Policy g = _policyRep.GetByID(int.Parse(selectedvals[i]));
c.Policies.Add(g);
}
}