我有一个公告页面,当用户查看它时,将其添加到"看到"数据库。这个问题是,如果我的用户然后两次点击同一页面,那么它会记录两次,依此类推。这是我的代码,如何检查数据库中是否已存在该条目?
public ActionResult Index()
{
string currentUserId = User.Identity.GetUserId();
var currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
List<Seen> seens = new List<Seen>();
foreach (Announcement anoun in db.Announcements)
{
seens.Add(new Seen
{
User = currentUser, // You have this already so why go to the database again?
Announcement = anoun, // Same with this.
});
}
db.Seens.AddRange(seens);
db.SaveChanges();
return View(db.Announcements.ToList());
}
答案 0 :(得分:1)
有几件事需要考虑:
1)数据库完整性 - 考虑添加UNIQUE约束作为业务唯一性的安全网 - 在您的情况下(SeenId,UserId)或类似的东西。这也将添加一个索引,使一些选择更快。
2)防止双重提交 - 第一点可防止重复的持久性,但也会导致错误。为避免这种情况,您应该查看preventing double submission。
在MVC中,处理防止双重提交的question显示了如何在MVC中实现Post / Redirect / Get Pattern。
答案 1 :(得分:0)
如何检查数据库中是否已存在该条目?
好吧,您可以简单地将SQL字段设置为唯一以防止多次输入数据,因为我假设您正在使用社交网络类型的应用,并且您希望每个用户都能够到&#34;查看&#34;你的帖子/页面只有一次。
另一种方法是使用相同的循环来搜索字段中的值,如果它在那里那么它就退出该过程。
答案 2 :(得分:0)
有一些方法可以阻止它。
将您的值设置为数据库/表中的主键(唯一性)
在插入数据库之前检查代码中的现有值(重定向或返回消息,如果存在)
首次点击