有时数据被一个被引用的用户从数据库中删除。剃刀上的尝试抓住这一点很好,但有没有另一种方式?可能避免在这种情况下重复尝试捕获吗?
现状:该模型包含一个Boxes列表。每个盒子都有一个容器。防止容器删除以避免错误意味着使用try catch。
任何错误处理,
<td>@m.Container.Name</td>
错误处理,
<td>@try{@m.Container.Name}catch { Deleted }</td>
许多列表都有类似的情况,它是可能的,关系数据可以被移除。除了这种尝试捕捉方法之外,还有更好的方法来完成这个任务吗?
一些额外的代码,以帮助这个例子:
视图模型:
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? *@
}
我们可以看到这个动作吗?如果删除发生在那里,您已经知道删除了什么。 – veblock 2012-03-20 23:38:01
@veblock - 我发布了一个更详细的例子。 – 2012-03-20 23:46:59