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

畫卷琴夢
发布: 2025-12-20 03:13:22
原创
269人浏览过
EF Core 插入后直接获取自增ID:调用SaveChanges()后实体主键属性自动赋值;需确保主键被正确识别为自增列,可通过约定(如Id/int)或显式配置ValueGeneratedOnAdd()实现。

ef core如何获取刚插入记录的id ef core获取自增id方法

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 拿不到或报错,需特别注意:

Text-To-Pokemon口袋妖怪
Text-To-Pokemon口袋妖怪

输入文本生成自己的Pokemon,还有各种选项来定制自己的口袋妖怪

Text-To-Pokemon口袋妖怪 1494
查看详情 Text-To-Pokemon口袋妖怪
  • SaveChanges() 前就读 ID:此时值仍是默认值(如 0),无效
  • 主键属性被标记为 [DatabaseGenerated(DatabaseGeneratedOption.None)]:EF 不会生成或回填 ID,必须自己赋值;若忘了赋值,会报“不能为 NULL”
  • 使用了 AddRange() 但未检查返回值:同样适用——每个实体的 ID 都会在 SaveChanges() 后自动填充
  • MySQL 连接字符串未启用 Allow User Variables=True(旧版驱动):可能导致 LAST_INSERT_ID() 获取失败,建议升级 Pomelo.EntityFrameworkCore.MySql 到 7.0+ 或 Microsoft.Data.MySqlConnector

异步场景下用 SaveChangesAsync

和同步方式逻辑一致,只是语法稍不同:

  • AddAsync()(可选,对单个实体非必需)
  • 必须用 await SaveChangesAsync()
  • ID 在 await 完成后立即可用

示例:

var log = new CustomerLoginLog { CustomerId = 123, LoginTime = DateTime.Now };
context.LoginLogs.Add(log);
await context.SaveChangesAsync(); // ✅ 异步提交
int logId = log.Id; // ✅ 此时已赋值
登录后复制

基本上就这些。只要主键配置正确、按流程调用 SaveChanges()(或异步版本),ID 就自然落在实体上——不复杂但容易忽略配置细节。

以上就是EF Core如何获取刚插入记录的ID EF Core获取自增ID方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号