c# - 如何避免通过更新保存重复值
问题描述
我正在尝试使用重复检查来实现更新功能。到目前为止,我可以检查我的数据库中是否有一些重复项,但是通过更新记录,我可以将 2 个重复项插入到数据库中,并且只有当我尝试添加第三个时才会出现错误。
有人知道如何检查更新的值并在保存有重复之前显示消息吗?
我的 MVC 控制器:
[HttpPost]
public JsonResult UpdateEvent(int id, Event e)
{
using (EventsDBEntities db = new EventsDBEntities())
{
Event eupt = db.Events.Where(x => x.Id == id).FirstOrDefault();
List<Event> evts = db.Events.Where(x => x.Title == e.Title).ToList();
if(evts.Count > 1)
{
return Json(new { data = e, success = false, error = "Order number already exists" }, JsonRequestBehavior.AllowGet);
}
eupt.Title = e.Title;
eupt.Description = e.Description;
eupt.Location = e.Location;
eupt.color = e.color;
eupt.fullDescription = e.fullDescription;
eupt.Address = e.Address;
eupt.Contact = e.Contact;
eupt.FbFSE = e.FbFSE;
eupt.FbMat = e.FbMat;
eupt.FbDel = e.FbDel;
eupt.FbCinfo = e.FbCinfo;
eupt.FbTask = e.FbTask;
eupt.FbCsutisfact = e.FbCsutisfact;
eupt.Comments = e.Comments;
eupt.TaskType = e.TaskType;
db.SaveChanges();
}
return Json(new { data = e, success = true }, JsonRequestBehavior.AllowGet);
}
如果我设置 if(evts.Count > 0),我将无法更新我的记录,但如果是 if(evts.Count > 1),则可以添加 2 个相同的值。有人可以帮助我吗?
解决方案
解决这个问题的最明显方法当然是简单地在标题列上定义一个 UNIQUE 约束。这就是我通常期望实现这种要求的方式。让数据库为所欲为。
但是,如果您真的想在代码中执行此操作,如果您更新除标题之外的所有内容,
List<Event> evts = db.Events.Where(x => x.Title == e.Title).ToList();
将为您提供要更新的记录。这不是您想要的,因为您想要所有具有这样标题的记录,而不是您要更新的记录。此外,请考虑使用有意义的变量名,并避免在不需要时将内容转换为列表:
var duplicate = db.Events.Where(x => x.Id != id && x.Title == e.Title).Any();
现在您的 if 语句变得不言自明:
if(duplicate)
{
return Json(new { data = e, success = false, error = "Order number already exists" }, JsonRequestBehavior.AllowGet);
}
在旁注中,您检查重复的Title,但告诉用户重复的Order number。这似乎很奇怪...
推荐阅读
- java - 为什么我的 Thymeleaf 只显示列表的最后一行
- python - 将时间戳转换为日期时间错误的 AM/PM
- apache-flink - k8s上的flink缺少状态值-在jobmanager / taskmanager崩溃时恢复作业
- oracle - 在 pyspark 的 oracle 查询中使用参数
- javascript - 从 React 中的 API 调用收到状态 404 后,如何重定向到错误页面?
- amazon-web-services - 如何在云端请求中使用 boto3 python 3.8 提取不记名令牌并在另一个查询中使用它
- mongodb - typeorm mongo db中的一对一关系
- html - 无法在primeng表中使用粘性标题
- java - 如何从android中的特定文件夹中获取所有视频和照片
- c++ - 如何转换 unique_ptr
* 到 unique_ptr *?