Я все еще изучаю нюансы 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 перенаправления после обновления.