首页 > 解决方案 > 实体框架 - 更改默认值

问题描述

我有一个 SQL Server 表,其中很多列都有默认值。一个例子是ModifiedDtm(最后一次修改行的时间),它将具有GETDATE()默认值。为避免与此冲突,我在 Entity Framework 6.2 中使用代码优先方法以以下方式实现了它:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime ModifiedDtm { get; set; }

这使得默认值在创建行时按预期工作。但是,它阻止我再次更新该列。

如何使它可以使用 SQL 默认值,但仍然允许稍后使用 EF 更改值?

标签: c#sql-serverentity-frameworkentity-framework-6

解决方案


您应该考虑为此使用流利的 API。在您的上下文类中添加一小部分以使用HasDefaultValueSQL设置默认值,如下所示

class MyContext : DbContext
{
    public DbSet<YourEntity> YourEntities{ get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<YourEntity>()
            .Property(b => b.Created)
            .HasDefaultValueSql("getdate()");
    }
}

注意:此解决方案需要 EF Core


推荐阅读