当执行实体框架AddOrUpdate时如何从更新中忽略一个或多个列?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当执行实体框架AddOrUpdate时如何从更新中忽略一个或多个列?相关的知识,希望对你有一定的参考价值。

我正在使用像这样的Entity Framework AddOrUpdate方法:

customerDbSet.AddOrUpdate(r => new { r.CustomerNumber, r.ReportNumber }, items);

此方法正在寻找CustomerNumberReportNumber,以确定是插入还是更新那些items。但是,在某些情况下,我需要省略另外一列以进行更新。有什么办法吗?

例如:

customerDbSet.AddOrUpdate(r => new { r.CustomerNumber, r.ReportNumber }, items, c => new { c.Reviewed } /* do not update `Reviewed` column.*/ });
答案

您可以将单个属性设置为未修改,以防止更新更改它们,例如在SaveChanges()之前:

foreach (var e in db.ChangeTracker.Entries().Where(e => e.Entity is Customer))
{
    e.Property(nameof(Customer.Reviewed)).IsModified = false;
}

以上是关于当执行实体框架AddOrUpdate时如何从更新中忽略一个或多个列?的主要内容,如果未能解决你的问题,请参考以下文章

将 AddOrUpdate 与 Entity Framework 6 Repository 一起使用的单元测试方法

如何使用实体框架从 DataGrid 更新数据库

WPF C# 应用程序在安装更新时更新实体框架

如何使用 AddOrUpdate 的多个条件来确定数据库是不是应该添加模型或更新?

如何使用实体框架更新数据库中的记录时覆盖模型验证

如何在 EF Core 3.1 中使用脚手架流程更新我的实体 - 执行超时已过期