Иногда данные удаляются из базы данных пользователем, на которого они ссылались.Попытка ловли в бритве справится с этим просто отлично, но есть ли другой способ?
Текущая ситуация: модель содержит список ящиков.Каждая коробка имеет контейнер.Защита от удаления Контейнера во избежание ошибок означает использование try catch.
Нет обработки ошибок,
<td>@m.Container.Name</td>
Обработка ошибок,
<td>@try{@m.Container.Name}catch { Deleted }</td>
Во многих списках есть похожие ситуации, когдавозможно, что реляционные данные могут быть удалены.Есть ли лучший способ выполнить это, кроме этого подхода try catch?
Дополнительный код, который поможет с примером:
Модель просмотра:
public class BoxVM
{
List<Box> Boxes { get; set; }
}
Модели:
public class Box
{
public int BoxId { get; set; }
public Material Material { get; set; }
public Container Container { get; set; }
}
public class Material
{
//fk
public int BoxId { get; set; }
public string Description { get; set; }
}
public class Container
{
//fk
public int BoxId { get; set; }
public string Name { get; set; }
}
Контроллер:
public ActionResult showBoxList()
{
var vm = new BoxVM();
vm.boxes = _boxRepo.Get().ToList();
var materials = _materialRepo.Get().ToList();
var containers = _containerRepo.Get().ToList();
foreach(var box in vm.boxes)
{
box.Material = materials.Where(m => m.BoxId == box.BoxId).Single();
box.Container = containers.Where(c => c.BoxId == box.BoxId).Single();
}
return View(vm);
}
Вид:
@model BoxVM
foreach(var m in Model.boxes)
{
<p>@m.Container.Name</p> @*// Breaks if specific container was deleted *@
<p>@try{@m.Container.Name}catch{<text>Deleted</text>}</p> @*// Doesn't break, but is there a better way? *@
}