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

如何在Entity Framework Core中手动设置主键值添加表记录?

解决EF Core手动设置自增主键Id的问题

要实现手动设置User表的Id值,需要同时调整EF Core的实体配置和数据库表的主键属性,以下是具体步骤:

1. 修改EF Core实体配置

默认情况下EF Core会将int类型主键设为自增,需要显式关闭这个行为,有两种方式可选:

方法一:数据注解方式

直接在实体类的Id属性上添加[DatabaseGenerated(DatabaseGeneratedOption.None)]注解,告诉EF Core不要自动生成该字段的值:

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int Id { get; set; }  
    public string Title { get; set; } = "";
}

方法二:Fluent API方式(推荐用于复杂配置场景)

在你的DbContext类的OnModelCreating方法中,通过Fluent API配置主键不自动生成:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<User>()
        .Property(u => u.Id)
        .ValueGeneratedNever();
}

2. 更新数据库表结构

因为之前的表已经创建了自增的Id列,需要取消其自增属性:

  • SQL Server:执行以下SQL语句,或在SSMS中修改表结构,将Id列的「标识规范」设为「否」
ALTER TABLE Users ALTER COLUMN Id INT NOT NULL;
GO
ALTER TABLE Users ADD CONSTRAINT PK_Users_Id PRIMARY KEY (Id);
  • MySQL:执行以下SQL语句
ALTER TABLE Users MODIFY COLUMN Id INT NOT NULL PRIMARY KEY;

3. 执行迁移(Code First模式下)

如果使用Code First开发,修改配置后需要执行迁移更新数据库:

Add-Migration RemoveIdAutoIncrement
Update-Database

注意事项

手动设置Id时,必须确保输入的Id值在表中唯一,否则会触发主键冲突异常。

内容的提问来源于stack exchange,提问作者Hosein Ghasemi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:35:57