У меня есть такая модель
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)
где-нибудь?