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

EF Core复合主键配置报错:需在OnModelCreating中使用HasKey

解决EF Core复合主键配置报错的方法

核心问题原因

EF Core不允许通过在多个属性上标记[Key]特性来配置复合主键——哪怕你已经在OnModelCreating里用HasKey配置了复合主键,只要实体类上还保留多个[Key]标记,就会触发报错。

具体解决步骤

  1. 移除实体类中的多个[Key]特性
    把MyModel里两个属性上的[Key]标记删掉,只保留其他必要特性:

    public class MyModel
    {
        [Column(Order = 0)]
        [StringLength(255)]
        public string column1 { get; set; }
    
        [Column(Order = 1)]
        [StringLength(255)]
        public string column2 { get; set; }
    }
    
  2. 确保OnModelCreating中的复合主键配置无冲突
    确认DbContext的OnModelCreating方法中已经通过HasKey正确配置复合主键;如果之前保留了ApplyConfigurationsFromAssembly调用,要检查是否存在针对MyModel的其他配置类(比如MyModelConfiguration),避免出现重复或错误的主键配置:

    public class MyContext : DbContext
    {
        public MyContext(DbContextOptions<MyContext> options) : base(options)
        {
        }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {            
            modelBuilder.Entity<MyModel>()
                  .HasKey(m => new { m.column1 , m.column2 });
            // 若需保留其他配置类应用,需确保这些类中无冲突的主键配置
            // modelBuilder.ApplyConfigurationsFromAssembly(typeof(MyContext).Assembly);
        }
    }
    
  3. 重新运行测试
    清理项目并重新构建后,再次执行xUnit测试,EnsureDeleted()操作即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:35:36