2016-12-16 75 views
-2

我有一个公告页面,当用户查看它时,将它添加到“看到”数据库中。这个问题是,如果我用户然后点击两次相同的页面然后记录两次,等等。这里是我的代码,我如何检查数据库中是否存在该条目?防止重复插入到数据库中

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

你只需要添加到数据库,在这里是检查你的代码,如果它已经存在的数据库? –

+0

@ L.B多数民众赞成在什么问题是 – user3042332

+0

所以你想有人为你写吗?你的努力在哪里? –

回答

0

我怎么能检查条目数据库中已存在?

好了,你可以简单的SQL字段设置为独特,以防止数据的多次入境的,因为我认为你是在应用程序的社交网络类型的工作,你希望每个用户能够“查看“您的帖子/页面只有一次。

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

1

有几件事情要考虑:

1)数据库完整性 - 考虑加入UNIQUE约束作为一个安全网,为企业的独特性 - 你的情况(SeenId,用户ID)或类似的东西。这也将添加一个索引,使得选择更快。

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

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

0

有一些方法可以防止它。

  • 后面插入数据库之前,设置你的价值在你的数据库/表(独特性)主键

  • 检查代码中的现有值(重定向或是否存在返回的消息)

  • 在客户端页面

    禁用提交按钮后立即先点击