ASP MVC - отношения многие ко многим - PullRequest
4 голосов
/ 17 февраля 2011

Я честно искал более часа удовлетворительного ответа на этот вопрос. Так что это не значит, что я не нашел ответов, просто не те, которые я считаю абсолютно правильными. Что может означать, что я ищу серебряную пулю, которой не существует.

В 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);
        }
    }

1 Ответ

1 голос
/ 17 февраля 2011

Я не совсем уверен, как вы ожидаете, что это будет работать, поэтому я не знаю, что вы ищете, но это правильный способ и по замыслу.

Есть много случаев моделирования.Если бы я сохранил ссылку, которую нашел, в идеальном примере, где удаление объекта из коллекции просто означает, что связь отсутствует, а не то, что нужно удалять строку.как:

 c.Policies.AddRange(_policyRep.GetByIDs(selectedvals[i]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...