【问题标题】:How to prevent Entity Framework from updating a certain column if it's not null?如果某个列不为空,如何防止实体框架更新它?
【发布时间】:2025-12-25 18:45:12
【问题描述】:

我有一个表,其中有一列名为 InsertedBy。基本上,当第一次插入记录时,该列包含插入它的人的姓名。然后它永远不会被该行的任何未来更新所修改。该列是 C# 实体中的一个属性,因为它需要与其他列一起读取。

如何防止 EF 在第一次插入后更新此列?我在 dbContext 中使用 SaveChanges。

【问题讨论】:

  • 除非您在检索该值后对其进行更改(假设它正在被跟踪),否则它不会。为了防止更改,您可以更改设置器的可见性。

标签: c# .net entity-framework


【解决方案1】:

我不确定你是否使用EF CodeFirst,但如果是这样,以下代码可能对你有用:

    public class Human
    {
        public int Id { get; set; }
        private string insertedBy;

        public string InsertedBy
        {
            get { return insertedBy; }
            set
            {
                if (string.IsNullOrEmpty(insertedBy))
                {
                    insertedBy = value;
                }
            }
        }
        public string Name { get; set; }
    }

InsertedBy 属性将不再更新。

【讨论】:

  • 这有危险,如果有人在更新期间更改了 InsertedBy 的值,它将覆盖原来的 InsertedBy。
  • @Tony_Henrich 你可以测试一下,它不会更新字段,因为'InsertedBy'中的前一个值是存在的。我确定这一点,因为我测试过。
【解决方案2】:

我通过对 InsertBy 的值进行往返。读取 InsertBy 的值并用相同的值更新它。

【讨论】: