我有两个对象:-
LabTest
LabTestDetails
一个LabTest
对象可以有零个或多个LabTestDetails
对象。我需要实现以下业务规则:-
如果已将 LabTest 对象分配给一个或多个 LabTestDetails 对象,则用户应该无法编辑它。
目前我已经实现了一个名为IsAlreadyAssigned
LabTest 对象的辅助方法(检查 LabTest 对象是否已分配给任何 LabTestDetails 对象):-
public partial class LabTest
{
public bool IsAlreadyAssigned(int id)
{
return (LabTestDetailss.Any(r2 => r2.LabTestID == id));
}}
然后我在Get & Post
编辑操作方法上添加了以下检查:-
public ActionResult Edit(int id)
{
LabTest c = repository.GetLabTest (id);
if ((c == null) || (c.IsAlreadyAssigned (id)))
{
return View("Error");
}
return View(c);
}
[HttpPost]
public ActionResult Edit(int id, FormCollection colletion)
{
LabTest c = repository.GetLabTest (id);
if ((c == null) || (c.IsAlreadyAssigned (id))) // *******
{
return View("Error");
}
try
{
if (TryUpdateModel(c))
{
elearningrepository.Save();
return RedirectToAction("Details", new { id = c.LabTestID });
}
}
以上可能在大多数情况下都可以正常工作,但是如果在检查 post 操作方法LabTest
后,对象刚刚被另一个用户分配给 labTestDetails 对象,if ((c == null) || (c.IsAlreadyAssigned (id)))
我在上面的代码中将其标记为(*),那么我的业务逻辑将被打破。
那么有没有一种方法可以实现我的操作方法,这样如果它已分配给 LabTestdetail 对象,它将始终阻止编辑 LabTest 对象。
BR