首页 > 解决方案 > 如何调试 EF Core 2 CurrentValues.SetValues

问题描述

我正在尝试调试 ef core 2 如何通过CurrentValues.SetValues调用 repo 更新实体更新适用于大多数实体,但不适用于这个实体,我不知道它试图转换的值是什么,因为该属性用于更新是日期时间。用于更新的值也是日期时间, var today = DateTime.UtcNow;

回购电话

   public virtual async Task<T> UpdateAsync(T t, object key)
    {
        if (t == null)
            return null;
        T exist = await _context.Set<T>().FindAsync(key);
        if (exist != null)
        {
            _context.Entry(exist).CurrentValues.SetValues(t);
            await _context.SaveChangesAsync();
        }
        return exist;
    }

代码调用更新

   foreach (var detail in details)
   {
       detail.IsActive = isActive;
       detail.ModifiedDate = today;
       detail.ModifiedBy = currentUserId;

      await _repository.UpdateAsync(detail, detailId);

                //updates.Add(Task.Run(async () =>
                //{
                //    await _repository.UpdateAsync(detail, detailId);
                //}));
     }

     //prior attempt is using WaitAll but for debugging, the call
     // is made in the foreach loop
     // if (updates.Count > 0)
     //           Task.WaitAll(updates.ToArray());

这是我可以找到的 EF 生成的输出,更新 sql:

  SET NOCOUNT ON;
  UPDATE [PaymentSyncDetails] SET [IsActive] = @p0, [ModifiedBy] = @p1,  [ModifiedDate] = @p2
  WHERE [PaymentSyncDetailID] = @p3;
  SELECT @@ROWCOUNT;

我需要检查参数,尤其是@p2

标签: c#entity-framework-core

解决方案


推荐阅读