You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF中使用ValueGeneratedOnAddOrUpdate确保Created列更新时不修改是否正确?

问题解答

你的理解不对,ValueGeneratedOnAddOrUpdate()并不是让EF不设置值,它的实际作用是告诉EF:插入和更新操作时,该列的值都由数据库生成。也就是说,不管插入还是更新,EF都不会手动给这个列赋值,而是依赖数据库的逻辑(比如触发器、默认约束)生成新值——这显然不符合你“更新时保留Created原有值”的需求。

正确的做法是使用ValueGeneratedOnAdd(),配合数据库层面的默认值配置:

  • 这个方法会告诉EF:仅在插入时由数据库生成该列的值,更新操作时,EF不会把Created列包含在生成的UPDATE语句里,数据库自然就不会修改这个列的原有值。
  • 数据库端你已经设置了GETUTCDATE()作为默认值,刚好匹配插入时的生成逻辑。

举个Fluent API的配置示例:

modelBuilder.Entity<YourEntity>()
    .Property(e => e.Created)
    .ValueGeneratedOnAdd()
    .HasDefaultValueSql("GETUTCDATE()");

如果用数据注解的话,可以这样写:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime Created { get; set; }

(注:DatabaseGeneratedOption.Identity在SQL Server中对应“仅插入时生成值”的逻辑,配合数据库默认值就能实现你的需求)

明确回答:EF完全支持更新时不对指定列做任何操作,只要配置正确,EF就不会在UPDATE语句中包含该列,确保原有值被保留。

内容的提问来源于stack exchange,提问作者David Thielen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:42:11