防止重复插入数据库

时间:2016-12-16 21:24:33

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一个公告页面,当用户查看它时,将其添加到"看到"数据库。这个问题是,如果我的用户然后两次点击同一页面,那么它会记录两次,依此类推。这是我的代码,如何检查数据库中是否已存在该条目?

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());
}

3 个答案:

答案 0 :(得分:1)

有几件事需要考虑:

1)数据库完整性 - 考虑添加UNIQUE约束作为业务唯一性的安全网 - 在您的情况下(SeenId,UserId)或类似的东西。这也将添加一个索引,使一些选择更快。

2)防止双重提交 - 第一点可防止重复的持久性,但也会导致错误。为避免这种情况,您应该查看preventing double submission

在MVC中,处理防止双重提交的question显示了如何在MVC中实现Post / Redirect / Get Pattern。

答案 1 :(得分:0)

  

如何检查数据库中是否已存在该条目?

好吧,您可以简单地将SQL字段设置为唯一以防止多次输入数据,因为我假设您正在使用社交网络类型的应用,并且您希望每个用户都能够到&#34;查看&#34;你的帖子/页面只有一次。

另一种方法是使用相同的循环来搜索字段中的值,如果它在那里那么它就退出该过程。

答案 2 :(得分:0)

有一些方法可以阻止它。

  • 将您的值设置为数据库/表中的主键(唯一性)

  • 在插入数据库之前检查代码中的现有值(重定向或返回消息,如果存在)

  • 首次点击

  • 后,在客户端页面中禁用提交按钮