Родительский атрибут в модели не обновляется во время действия HttpPost - PullRequest
0 голосов
/ 05 января 2012

Я все еще изучаю нюансы ASP.NET MVC, и это последний камень преткновения, с которым я столкнулся.Я использовал проект генератора для создания своих классов модели «сначала код» из существующей базы данных.Вот некоторые ключевые части моего кода:

// ***** Parent model
public partial class Network
{
    public int Id { get; set; }

        public virtual ICollection<NetworkDevice> NetworkDevices { get; set; }

    // Other attributes removed for brevity
}

//  ***** Child model
public partial class NetworkDevice
{
    public int Id { get; set; }
    public string Description { get; set; }

    // Reference to parent model
   public virtual Network Network { get; set; }

    // Other attributes removed for brevity
}

// ***** Controller code
NetworkManagementEntities _db = new NetworkManagementEntities();

//
// GET: /Device/Edit/5

public ActionResult Edit(int id)
{
    NetworkDevice model = _db.NetworkDevices.FirstOrDefault(n => n.Id == id);
    return View(model);
}

//
// POST: /Device/Edit/5

[HttpPost]
public ActionResult Edit(NetworkDevice model)
{
    try
    {
        if (ModelState.IsValid)
        {
            _db.Entry(model).State = EntityState.Modified;
            _db.SaveChanges();

        // This is where the exception occurs because model.Network is null
            return RedirectToAction("Edit", "Network", new { id = model.Network.Id });
        }

        return View(model);
    }
    catch
    {
        return View(model);
    }
}

Мой вопрос ... как я могу гарантировать, что на родительский атрибут Network можно ссылаться, чтобы я мог правильно перенаправить после редактирования?

(Некоторая дополнительная справочная информация, которая может пролить некоторый свет на эту проблему: при первом создании классов модели одним из атрибутов NetworkDevice был Network_ID, который сопоставляет столбец внешнего ключа с родительской таблицей Network.Однако мне пришлось удалить этот атрибут из модели, потому что в представлении редактирования для сети я отображаю сетку дочерних записей NetworkDevice и в коде, который создает эту сетку, возникает исключение, когда я пытаюсь выполнить итерацию по Model.Network.NetworkDevices. Возникает исключение: « Более одного элемента в коллекции метаданных соответствуют идентификатору« Network_Id ». »)

ОБНОВЛЕНИЕ: решение, которое я придумала, состоит в том, чтобы оставитьсвойство Network_ID в классе NetworkDevice, но украсьте его с помощью [ForeignKey] атрибут, который устраняет исключение, описанное выше.Затем я ссылаюсь на Network_ID при создании URL перенаправления после обновления.

...