NET CORE WEB-如何检查数据库是否在POST方法中正确更新



ASP NET CORE-WEB(使用NET CORE 3.0和实体框架核心( 在我的方法POST中,我从视图中接收元素,然后我想将它们保存到数据库中。我是这样做的,但如何检查是否出了问题发布方法:

public ViewResult EditBook(EditBookViewModels model)
{
//Get the book from the database
BooksDisplayed book = _bookStore.GetSpecificBook(model.Id);
//Check for the book
if (book == null)
{
ViewBag.ErrorMessage = $"Book with the respective ID:{model.Id} cannot be found.";
return View("NotFound");
}
if (ModelState.IsValid)
{
book.BooksInStore = model.BooksInStore;
book.BookGenre = model.BookGenre;
book.StockOfBooks = model.StockOfBooks;
book.Price = model.Price;
_bookStore.UpdateBook(book);
}
return View(model);
//how to check if the object has been updated in the database ?
}

在内置类UserManager和IdentityResult之前我使用的地方,这是可以的,因为在IdentityResult中有Successed属性,这样我就可以将错误添加到模型状态中。很明显,在代码的某个地方,IdentityResult是继承的。所以我确实查看了微软的页面:检查POST METHOD,他们正在使用try-catch和DbUpdateConcurrentException。我也应该这么做吗?非常感谢。

是的,您可以使用Try-Catch语句来检查是否存在异常,如果没有异常,则表示更新语句执行成功。

但是,当预期实体的SaveChanges将导致数据库更新时,DbContext引发DbUpdateConcurrentException异常,但实际上数据库中没有行受到影响(同时更新(。可能存在其他异常,可能会导致更新失败。因此,我建议您可以尝试捕获DbUpdateException或Exception异常。代码如下:

try
{
_context.Update(movie);
await _context.SaveChangesAsync();
}
catch (DbUpdateException ex) 
{
//do something
}

try
{
_context.Update(movie);
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
//do something
}

相关内容

最新更新