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

EF Core 6数据库优先插入SQL Server时默认约束值不生效问题

EF Core 6(数据库优先)插入SQL Server时默认约束不生效问题

我在使用Entity Framework Core 6的数据库优先模式向SQL Server插入数据时遇到问题:目标表的rap_number字段配置了默认约束DEFAULT (abs(checksum(newid())%(90000000))) FOR [rap_number],直接用SQL语句插入且不传入该字段时能正常生成对应值,但通过EF Core执行插入操作时,rap_number字段始终为0。

相关代码

实体类RaffelPromo

public partial class RaffelPromo
{
    public string rap_mandt { get; set; } = null!;
    public int rap_id { get; set; }
    public int rap_sup_id { get; set; }
    public int rap_user_id { get; set; }
    public int rap_number { get; set; }
    public DateTime rap_date_ini { get; set; }
    public DateTime rap_date_end { get; set; }
    public bool rap_sts { get; set; }
    public DateTime rap_date_create { get; set; }

    public virtual SubclassPromo rap_ { get; set; } = null!;
    public virtual UserPromo rap_Navigation { get; set; } = null!;
}

插入操作代码

RaffelPromo raffelPromo = RaffelPromoDTO.FromDTOToDB(raffelPromoDTOList[i]);
await dbContext.RaffelPromos.AddAsync(raffelPromo);
await dbContext.SaveChangesAsync();

解决方法

问题根源是EF Core会将int类型属性默认初始化为0,插入时会把这个0值发送给数据库,直接覆盖了默认约束的生效逻辑。可以通过以下方式解决:

  • 配置EF Core识别数据库默认值
    在上下文的OnModelCreating方法中,指定rap_number字段使用数据库生成的默认值:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<RaffelPromo>()
            .Property(p => p.rap_number)
            .HasDefaultValueSql("abs(checksum(newid())%(90000000))")
            .ValueGeneratedOnAdd();
    }
    

    这样EF Core插入时不会将0值传入数据库,转而触发默认约束生成对应数值。

  • 插入时标记字段为未修改
    如果不想修改模型配置,可以在插入前手动标记rap_number为未修改状态,让EF Core生成的INSERT语句排除该字段:

    RaffelPromo raffelPromo = RaffelPromoDTO.FromDTOToDB(raffelPromoDTOList[i]);
    dbContext.Entry(raffelPromo).Property(p => p.rap_number).IsModified = false;
    await dbContext.RaffelPromos.AddAsync(raffelPromo);
    await dbContext.SaveChangesAsync();
    
  • 检查DTO转换逻辑
    确认RaffelPromoDTO.FromDTOToDB方法没有主动给rap_number赋值为0,避免不必要的数值覆盖(但由于int是值类型默认值为0,仍需配合上述EF配置才能生效)。

内容的提问来源于stack exchange,提问作者Edgar Gomez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:33:24