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
不可为空,则可能会进一步简化。
我正在尝试使用 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
不可为空,则可能会进一步简化。