Entity Framework 核心:列名无效 'UserId1'

Entity Framework Core : invalid column name 'UserId1'

我正在尝试使用 Entity Framework Core / .NET 5 与我的数据库进行交互。

当我尝试查询 DbContent.UserClaims 时,出现以下错误:

Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid column name 'UserId1'.

我不确定 UserId1 我们来自哪里。我有一个名为 UserId 的 属性,它是外键。这是关系映射

这是我在 DbContext class

中尝试做的
protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<User>(user =>
    {
        user.HasKey(r => r.Id);
        user.HasMany(x => x.UserRoles).WithOne().HasForeignKey(x => x.UserId);
        user.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.UserId);
        user.HasMany(x => x.UserTokens).WithOne().HasForeignKey(x => x.UserId);
    });

    builder.Entity<UserClaim>(userClaim =>
    {
        userClaim.HasKey(r => r.Id);
        userClaim.HasOne(r => r.User).WithOne().HasForeignKey<UserClaim>(x => x.UserId);
    });
}

这里是 UserClaim class 派生自 IdentityUserClaim

public class UserClaim : IdentityUserClaim<string>
{
    public virtual User User { get; set; }
}

这是从 IdentityUser

派生的 User class
public class User : IdentityUser<string>
{
    public virtual ICollection<UserToken> UserTokens { get; set; }
    public virtual ICollection<UserRole> UserRoles { get; set; }
    public virtual ICollection<UserClaim> UserClaims { get; set; }
}

这是 EF5 正在生成的查询

SELECT [u].[Id], [u].[ClaimType], [u].[ClaimValue],[u].[UserId], [u].[UserId1]
FROM [UserClaims] AS [u]

如何在 Entity Framework Core 中解决这个问题?

您在这里使用了影子属性,除此之外,还试图将 UserId 外键添加到用户本身。由于 UserId 已在 class 中定义 属性,因此每次您尝试在用户 table 中添加外键时,它都会向 属性 名称添加后缀同名。

应该是这样的:

modelBuilder.Entity<UserClaim>()
        .Property<int>("UserForeignKey");

modelBuilder.Entity<UserClaim>()
    .HasOne(a => a.User)
    .WithMany(b => b.UserClaims)
    .HasForeignKey("UserForeignKey")

阅读the documentation了解如何为阴影属性配置 Fluent API,以及使用 Fluent API 的其他一些方法。