【问题标题】:Entity Framework Core : invalid column name 'UserId1'实体框架核心:无效的列名“UserId1”
【发布时间】:2021-11-22 17:29:34
【问题描述】:

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

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

Microsoft.Data.SqlClient.SqlException (0x80131904):列名“UserId1”无效。

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

这是我在 DbContext 类中尝试做的事情

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);
    });
}

这是从IdentityUserClaim派生的UserClaim

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

这是从IdentityUser派生的User

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 中解决此问题?

【问题讨论】:

    标签: entity-framework-core asp.net-identity entity-relationship


    【解决方案1】:

    您在这里使用影子属性,除此之外,还尝试将 UserId 外键添加到 User 本身。由于 UserId 是该类中已定义的属性,因此每次您尝试在用户表中添加同名外键时,它都会为属性名称添加后缀。

    应该是这样的:

    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 的其他一些方法。

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多