ASP.NET Core и EF Core: исключение параллелизма не создается, несмотря на рабочую версию строкиC#

Место общения программистов C#
Ответить
Anonymous
 ASP.NET Core и EF Core: исключение параллелизма не создается, несмотря на рабочую версию строки

Сообщение Anonymous »

Это часть моего метода, который создает резервирование книг:

Код: Выделить всё

var book = await _context.Books.FirstOrDefaultAsync(b => b.Id == id);

if (book == null || !book.IsAvailable)
{
return RedirectToAction("Index");
}

var reservation = new Reservation
{
BookId = book.Id,
UserId = user.Id,
ReservedAt = DateTime.Now,
DueDate = DateTime.Now.Date.AddDays(1).AddHours(23).AddMinutes(59).AddSeconds(59),
IsLease = false
};

book.IsAvailable = false;
var rv = Convert.FromBase64String(RowVersion);

_context.Entry(book).Property(b => b.RowVersion).OriginalValue = rv;

try
{
_context.Reservations.Add(reservation);
_context.Books.Update(book);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
ViewData["ErrorMessage"] = "Book already reserved by another user.";
return RedirectToAction("Index", new { searchTitle = searchTitle });
}
И свойство версии строки модели книги:

Код: Выделить всё

[Timestamp]
public byte[] RowVersion { get; set; }
Я пытаюсь обработать здесь параллелизм, но исключение, когда два пользователя нажимают кнопку «Зарезервировать» и вызывают этот метод, никогда не выдается. У меня есть атрибут [Timestamp] для версии строки в моей модели книги, и я проверил, что он действительно меняется каждый раз, когда обновляется книга. Я также передаю эту версию строки из моего представления в скрытое поле, где я конвертирую ее в строку. Я распечатал журналы и вижу, что они действительно пройдены. Я не знаю, что мне здесь не хватает, пожалуйста, помогите.
Я также пытался включить AsNoTracking, как в учебнике Microsoft, но это ничего не изменило.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-rowver
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»