将Microsoft.AspNetCore.Identity.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Tools和Npgsql.EntityFrameworkCore.PostgreSQL块升级到版本6.0.0后,我的 .NET 6.0 Web API 开始抛出此异常:
实体类型“RefreshToken”已被标记为拥有,必须通过导航从另一个实体类型引用。将导航添加到指向“RefreshToken”或不将其配置为拥有的实体类型。
每当执行任何涉及数据库的操作时,似乎都会引发异常。如果我正确理解错误,它不会在 RefreshToken 实体配置中找到导航,但是我自动生成的 ModelSnapshot 似乎确实包含它。
RefreshToken.cs(为简化起见,删除了一些属性)
[Owned]
public class RefreshToken
{
[Key]
public int Id { get; set; }
public string Token { get; set; }
public virtual User User { get; set; }
}
用户.cs
public class User : IdentityUser
{
public List<RefreshToken> RefreshTokens { get; set; }
}
摘自 BuildModel(ModelBuilder modelBuilder)
modelBuilder.Entity("API.Models.User", b =>
{
b.OwnsMany("API.Models.RefreshToken", "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("RefreshTokens");
});
我查看了 EF Core 6.0 重大更改(https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-6.0/break-changes#owned-index)但是找不到会导致此问题的原因。