У меня есть приложение Asp.net MVC, работающее в AppHarbor. Ежедневный процесс заказа по электронной почте:
- Пользователь вводит свою электронную почту и отправляет ее.
- Система обрабатывает заказ и отправляет электронное письмо со ссылкой.
- Пользователь проверяет электронную почту и щелкает ссылку, чтобы сделать следующий шаг ...
Дело в том, что между шагами № 2 и № 3 может пройти много времени. Некоторые пользователи проверяют свою электронную почту немедленно, другие через день или даже позже. Главное, чтобы прошло достаточно времени, чтобы приложение на сервере завершилось.
Поэтому, когда пользователь щелкает ссылку, это может означать, что ему придется немного подождать, пока приложение запустится снова ...
Вопрос
Когда обработка шага № 3 обновляется, запись в базе данных обновляется с отметкой времени (тип, конечно, datetime
), когда выполнялся шаг № 3. Но вот так: я вижу записи с полностью идентичными временными метками ! Как это может произойти?
Метка времени генерируется на прикладном уровне, а затем отправляет обновленную базу данных. Я использую PetaPoco для доступа к данным.
Что может вызывать одновременную запись нескольких записей? У моего приложения такой маленький трафик, что оно иногда закрывается в течение дня, поэтому мне трудно поверить, что несколько (до трех) пользователей сделал шаг № 3 в то же время. И поскольку это выполняется в одном процессе, я полагаю, это невозможно ...
Что может быть причиной этого?
Обновление кода действительно очень просто
using (var db = this.DataContext)
{
db.Execute(Sql
.Builder
.Append("update dbo.SteppedProcess set Step3ProcessedOn = @0", DateTime.Now)
.Where("Step3ProcessedOn is null")
.Where("Id = @0", id));
}