EF Core 未更新 Table

EF Core Not Updating Table

我正在尝试使用 Entity Framework Core 3.1 更新两个相关的 table。仅更新第一个 table (Paycheck)。第二个 table (Tax) 没有更新但没有产生错误。我做错了什么?

我有两个相关的数据库 table 如下所示:

**Paycheck Table**
PaycheckId int  (Primary Key)
TaxId      int  (Foreign Key)
Deleted    bool

**Tax Table**
TaxId      int   (Primary Key)
Deleted    bool

调用以下方法时,我想将每个 table 中的 Deleted 字段设置为 true。 Paycheck table 中的 Deleted 字段按预期设置为真,但 Tax table 中的 Deleted 字段未设置为是的,我不确定为什么。

public void DeletePaycheck(int PaycheckID)
{
     using (var context = new FinancialContext())
     {
            // Get TaxId from Paycheck Table
            var taxId = context.Paycheck
                        .Where(t => t.PaycheckId == PaycheckID)
                        .Select(t => t.TaxId)
                        .Single();


            var paycheckEntity = 
                  context.Paycheck.FirstOrDefault(i => i.PaycheckId == PaycheckID);

            var taxEntity = context.Paycheck
                            .Include(t => t.Tax)
                            .FirstOrDefault(t => t.TaxId == taxId);

            if (paycheckEntity != null)
                    paycheckEntity.Deleted = true;

            if (taxEntity != null)
                    taxEntity.Deleted = true;

           context.SaveChanges();
     }

这应该有所帮助。

context.Update(paycheckEntity);
context.Update(taxEntity);
context.SaveChanges();

您的代码不起作用的原因是这部分:

var taxEntity = context.Paycheck
     .Include(t => t.Tax)
     .FirstOrDefault(t => t.TaxId == taxId);

taxEntity 是 Paycheck 的一个实例,因此您要在具有指定 TaxId 的随机 Paycheck 实例而不是 Tax 实例上设置 Deleted = true

整个逻辑可以被替换为

var paycheck = context.Paycheck
     .Include(it => it.Tax)
     .SingleOrDefault(it => it.PaycheckId == PaycheckID);

if (paycheck != null) 
{
    paycheck.Deleted = true;

    if (paycheck.Tax != null) 
    {
        paycheck.Tax.Deleted = true;
    }
    context.SaveChanges();
}

如果 Tax 不可为空,则可能会进一步简化。