2016-12-16 82 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

有一些方法可以防止它。

  • 後面插入數據庫之前,設置你的價值在你的數據庫/表(獨特性)主鍵

  • 檢查代碼中的現有值(重定向或是否存在返回的消息)

  • 在客戶端頁面

    禁用提交按鈕後立即先點擊