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

Entity Framework Core 6.0.20迁移未为数据库添加主键问题排查

问题原因分析
  • 缺失必要命名空间:[Key]注解属于System.ComponentModel.DataAnnotations命名空间,[DatabaseGenerated]属于System.ComponentModel.DataAnnotations.Schema,如果实体类未引用这两个命名空间,EF Core无法识别注解。
  • 配置优先级冲突:若DbContext的OnModelCreating方法中存在错误配置(比如调用HasNoKey()),或Fluent API配置覆盖了数据注解,会导致主键设置失效。
  • 实体定义错误:主键字段的注解拼写错误(如把Key写成Keys)、字段类型不符合主键要求(比如用可空类型),都会让EF Core忽略主键配置。
  • 依赖版本不一致:EF Core核心包、工具包、数据库提供商包(如SqlServer)版本不统一,可能引发注解识别异常。
  • 迁移文件异常:手动修改过迁移文件,删除了主键相关代码,后续生成的迁移不会自动补全主键配置。
解决方向
  • 补充命名空间引用:在实体类顶部添加:
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    
  • 排查DbContext配置:打开OnModelCreating方法,检查是否存在modelBuilder.Entity<JobCollectionRoute>().HasNoKey();这类移除主键的代码,若使用Fluent API配置主键,确保与注解逻辑一致,避免混用冲突。
  • 校验实体类定义:确认主键字段的注解正确,例如:
    public class JobCollectionRoute
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID { get; set; }
        // 其他字段
    }
    
    注意字段类型不可为空(如int而非int?),注解无拼写错误。
  • 统一依赖版本:在NuGet包管理器中,将所有EF Core相关包(如Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Tools、Microsoft.EntityFrameworkCore.SqlServer)的版本统一为6.0.20。
  • 重建迁移:执行以下命令清理并重新生成迁移:
    Remove-Migration
    Add-Migration InitialSetup
    Update-Database
    
    确保生成的迁移文件包含migrationBuilder.AddPrimaryKey代码。
  • 验证数据库连接:确认连接字符串指向目标数据库,避免因操作错误数据库导致的误解。

内容的提问来源于stack exchange,提问作者Eric Elliston

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:10