EF Core复合主键配置报错:需在OnModelCreating中使用HasKey
解决EF Core复合主键配置报错的方法
核心问题原因
EF Core不允许通过在多个属性上标记[Key]特性来配置复合主键——哪怕你已经在OnModelCreating里用HasKey配置了复合主键,只要实体类上还保留多个[Key]标记,就会触发报错。
具体解决步骤
移除实体类中的多个
[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; } }确保
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); } }重新运行测试
清理项目并重新构建后,再次执行xUnit测试,EnsureDeleted()操作即可正常执行。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

