2016-12-16 3 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, UserId) или что-то подобное. Это также добавит индекс, который ускоряет выбор.

2) предотвратить двойную отправку - первая точка предотвращает сохранение дубликатов, но также приведет к ошибке. Чтобы этого избежать, вы должны взглянуть на preventing double submission.

В MVC question, посвященный предотвращению двойного представления, показывает, как Post/Redirect/Get Pattern реализован в MVC.

0

Существует несколько способов предотвратить это.

  • Установите значение в качестве первичного ключа в базе данных/таблицы (уникальность)

  • Проверка для существующего значения в коде позади, прежде чем вставить в БД (перенаправление или возвращает сообщение, если существуют)

  • Отключить кнопку отправки на клиентской странице сразу после первого щелчка

Смежные вопросы