控制器的操作如何同步写入数据库?我尝试过RowVersion,但它忽略了例外写作。
更新
假设我有一个博客帖子。当访问者访问帖子时,我想增加帖子的视图统计信息。
我尝试使用RowVersion来处理并发访问。
public async Task<IActionResult> View(string postTitleSlug)
{
var post = await _db.Posts
.Where(p => p.TitleSlug.Equals(postTitleSlug)
.FirstOrDefaultAsync();
var saveFailed = true;
while (saveFailed)
{
try
{
saveFailed = false;
post.ViewCount += 1;
await _db.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException e)
{
saveFailed = true;
e.Entries.Single().Reload();
}
}
return Ok();
}
但我无法处理它的行为。如果涉及两个或更多表,则while
循环过多。
因为没有必要立即更新这些统计数据,所以我正在考虑像rabbitmq,resque这样的任务队列......但是对于我的简单博客帖子来说它是否过度了?