如何在EF Core Identity中重置Id列的自增索引?
解决ASP.NET Core Identity主键int自增延续问题
一、重置表自增起始值(SQL Server环境)
测试环境清空数据后,若要让Id重新从1开始,直接在数据库执行SQL命令:
- 重置角色表自增:
DBCC CHECKIDENT ('AspNetRoles', RESEED, 0); - 重置用户表自增:
DBCC CHECKIDENT ('AspNetUsers', RESEED, 0);
其他Identity表同理替换表名即可。
注意:仅适合测试环境,生产环境别碰,避免数据冲突。
二、固定角色ID的SeedData写法
要让admin、moderator、user的ID严格为1、2、3,直接在SeedData里手动指定ID,不用依赖自增:
var roles = new List<IdentityRole<int>> { new IdentityRole<int> { Id = 1, Name = "admin", NormalizedName = "ADMIN" }, new IdentityRole<int> { Id = 2, Name = "moderator", NormalizedName = "MODERATOR" }, new IdentityRole<int> { Id = 3, Name = "user", NormalizedName = "USER" } }; foreach (var role in roles) { if (!await _roleManager.RoleExistsAsync(role.Name)) { await _roleManager.CreateAsync(role); } }
这样不管之前的自增序列是多少,都会插入指定ID的角色,重复执行SeedData也不会报错(先检查角色是否存在)。
三、注册用户时重置自增(仅测试用)
如果注册新用户也想让ID从1开始,注册前先执行用户表的DBCC重置命令就行,但同样仅限测试场景,生产环境绝对不要这么操作。
内容的提问来源于stack exchange,提问作者Kamil
相关产品推荐
相关产品推荐

