我也有这样的模型
public class Action ()
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public bool Completed { get; set; }
public DateTime CompletedOn { get; set; }
public virtual User CompletedBy { get; set; }
}
还有一个异步函数:
public async Task<ActionResult> MarkActionCompleted(int id)
{
using(MyDbContext db = new MyDbContext())
{
UserManager userManager = new UserManager(new UserStore(db));
var user = await userManager.FindByIdAsync(User.Identity.GetUserId());
var action = await db.Actions.SingleOrDefaultAsync(x => x.Id == id);
if (action == null)
{
return new HttpNotFoundResult();
}
action.Completed = true;
action.CompletedOn = DateTime.Now;
action.CompletedBy = user;
await db.SaveChangesAsync();
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
我注意到,通过查看数据库中的所有条目,大约2%(441/21547)的记录被标记为已完成,但是CompletedBy和CompletedOn均为空。我一直在努力解决这个问题。这是修改此表的唯一功能。
所以我的问题是,我使用async / await错误吗?是否有可能在检索用户之前调用SaveChangesAsync
?还是上下文有问题?我应该在某个地方使用ConfigureAwait(false)
吗?