升级EF Core 6.0后Owned实体RefreshToken触发InvalidOperationException如何解决?
问题根因
EF Core 6.0 加强了Owned实体类型的校验逻辑,你的代码存在两处不符合6.0校验规则的配置,触发了异常:
- RefreshToken类中定义了指向所有者User的反向导航属性,EF扫描时会误判RefreshToken为独立实体,而非从属的Owned类型
- RefreshToken同时通过
[Owned]特性和Fluent API的OwnsMany重复配置Owned属性,多余的特性标注干扰了EF的实体类型判定
解决方案
1. 修正RefreshToken实体定义
删除多余的特性和反向导航属性,修改后代码如下:
public class RefreshToken { public int Id { get; set; } public string Token { get; set; } }
2. 优化Fluent API配置
调整为强类型写法,避免字符串拼写错误引发的配置失效:
modelBuilder.Entity<User>(b => { b.OwnsMany<RefreshToken>(u => u.RefreshTokens, b1 => { b1.Property<int>("Id") .ValueGeneratedOnAdd() .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b1.Property<string>("Token") .HasColumnType("text"); b1.Property<string>("UserId") .IsRequired() .HasColumnType("text"); b1.HasKey("Id"); b1.HasIndex("UserId"); b1.ToTable("RefreshTokens"); b1.WithOwner().HasForeignKey("UserId"); }); b.Navigation(u => u.RefreshTokens); });
3. 重置迁移配置
删除项目中旧的迁移文件和ModelSnapshot文件,重新执行以下命令生成新的迁移:
Add-Migration FixRefreshTokenOwnedConfig Update-Database
内容的提问来源于stack exchange,提问作者user3757605
相关产品推荐
相关产品推荐

