EF Core如何获取刚插入记录的ID EF Core获取自增ID方法

admin 百科 14
EF Core 插入后直接获取自增ID:调用SaveChanges()后实体主键属性自动赋值;需确保主键被正确识别为自增列,可通过约定(如Id/int)或显式配置ValueGeneratedOnAdd()实现。

EF Core如何获取刚插入记录的ID EF Core获取自增ID方法-第1张图片-佛山资讯网

EF Core 插入记录后直接获取自增 ID,核心就一点:调用 SaveChanges() 之后,实体对象的主键属性(如 Id)会自动被赋值为数据库返回的自增数值。不需要额外查询、不需要手动调用 SCOPE_IDENTITY(),EF Core 在底层已通过数据库提供程序(如 SQL Server 的 OUTPUT INSERTED.* 或 MySQL 的 LAST_INSERT_ID())自动完成。

确保主键被正确识别为自增列

这是前提。EF Core 必须知道哪个字段是数据库自增主键,否则不会回填 ID:

  • 默认约定:属性名是 Id<classname>Id</classname>(如 UserId),且类型为 intlong 等整数类型时,EF Core 自动推断为自增标识列(SQL Server)或 AUTO_INCREMENT(MySQL)
  • 显式配置(推荐用于明确意图或避免歧义): OnModelCreating

    modelBuilder.Entity<User>().Property(e => e.Id).ValueGeneratedOnAdd();

    登录后复制

  • 若主键列名是 ID 但实际不是自增列,EF Core 仍可能误判——此时必须用 DatabaseGeneratedOption.None 显式禁用自动生成,否则插入会失败

插入后立即读取 ID 的标准写法

代码简洁、安全、无需额外操作:

  • 创建实体并设置非主键字段
  • 调用 Add() 加入上下文变更跟踪
  • 调用 SaveChanges() 提交到数据库
  • 紧接着读取实体的主键属性即可

示例:

var user = new User { Name = "Alice" };
context.Users.Add(user);
context.SaveChanges(); // ← 关键:执行后 user.Id 已被赋值
int newId = user.Id; // ✅ 此时就是刚插入的自增ID

登录后复制

常见问题与避坑点

以下情况会导致 ID 拿不到或报错,需特别注意:

标签: mysql ai microsoft 常见问题

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~