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

.Net Core使用EF Core从Excel导入数据到数据库时如何自动生成ID

EF Core Excel导入场景下主键ID自动生成解决方案

核心逻辑是依赖EF Core内置的自增主键支持,无需在Excel中提前录入ID字段,配置完成后导入时自动生成ID值。

1. 配置实体主键自增属性

两种配置方式二选一即可:

数据注解方式

直接在实体类的ID字段上加特性:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

public class 你的实体类名
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    // 其余和Excel字段映射的属性,例如:
    public string 字段1 { get; set; }
    public int 字段2 { get; set; }
}

Fluent API方式

在DbContext的OnModelCreating方法中配置:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<你的实体类名>()
        .HasKey(e => e.Id);
    modelBuilder.Entity<你的实体类名>()
        .Property(e => e.Id)
        .ValueGeneratedOnAdd();
}

2. 调整导入逻辑

映射Excel行数据到实体对象时,完全不需要给Id属性赋值,直接将实体添加到DbContext即可,示例逻辑:

// 循环读取Excel每一行
foreach (var excelRow in 读取到的Excel行集合)
{
    var 实体对象 = new 你的实体类名
    {
        // 仅赋值Excel中存在的对应字段,Id完全不用处理
        字段1 = excelRow.对应列值,
        字段2 = excelRow.对应列值,
        // 其余字段依次赋值
    };
    // 加入上下文集合
    dbContext.你的实体集合名.Add(实体对象);
}
// 批量保存
dbContext.SaveChanges();
// 保存完成后,每个实体对象的Id属性会自动填充数据库生成的自增值

3. 数据库端校验(仅DB First场景需要)

如果是先建数据库表再生成实体的场景,需要确认表中的ID字段已经开启自增属性:

  • SQL Server:确认ID字段的「标识规范」设置为「是」,标识增量和种子默认设为1即可
  • MySQL:确认ID字段设置为AUTO_INCREMENT
  • PostgreSQL:确认ID字段类型为SERIAL或IDENTITY

注意事项

  • 除非有特殊自定义需求,不要手动给Id属性赋值,EF Core会自动忽略手动赋值,优先使用数据库生成的自增值
  • 批量导入时建议批量添加所有实体后统一调用SaveChanges,比每行保存的效率高很多
  • 如果导入后需要用生成的ID做后续业务处理,SaveChanges后直接取实体的Id属性即可,无需额外查询数据库

内容的提问来源于stack exchange,提问作者Sin Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:09:04