Entity Framework 核心中的冗余参考列

Redundant Reference Column in Entity Framework Core

场景是:

每张图片可以属于多个用户,每个用户可以拥有多张图片。

对于多对多关系,我创建了一个单独的 class 并使用了 FluentAPI。

class如下:

用户

public class AppUser : IdentityUser
{
    public IEnumerable<UsersImages> UsersImages { get; set; }
}

图片

public class Image
{
    public int Id { get; set; }
    public string ImageUrl { get; set; }

    public IEnumerable<UsersImages> UsersImages { get; set; }
}

用户图片

public class UsersImages
{
    public string UserId { get; set; }        
    public int ImageId { get; set; }
    public AppUser TheUser { get; set; }
    public Image TheImage { get; set; }
}

整个AppDbContext代码

public class SiteDbContext : IdentityDbContext<AppUser>
{
    public SiteDbContext(DbContextOptions options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<UsersImages>()
            .HasKey(us => new { us.UserId, us.ImageId });

        modelBuilder.Entity<UsersImages>()
            .HasOne(us => us.TheUser)
            .WithMany(u => u.UsersImages)
            .HasForeignKey(us => us.UserId);

        modelBuilder.Entity<UsersImages>()
            .HasOne(us => us.TheImage)
            .WithMany(s => s.UsersImages)
            .HasForeignKey(us => us.ImageId);
    }
}

现在的问题是

通过创建迁移,我得到以下代码:

 migrationBuilder.CreateTable(
            name: "Image",
            columns: table => new
            {
                Id = table.Column<int>(type: "INTEGER", nullable: false)
                    .Annotation("Sqlite:Autoincrement", true),
                ImageUrl = table.Column<string>(type: "TEXT", nullable: true),
                AppUserId = table.Column<string>(type: "TEXT", nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Image", x => x.Id);
                table.ForeignKey(
                    name: "FK_Image_AspNetUsers_AppUserId",
                    column: x => x.AppUserId,
                    principalTable: "AspNetUsers",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Restrict);
            });

为什么会有 AppUserId 列? (我不要)

谢谢大家

解决方案

我的问题是因为分心了。

@Ivan.Stoev 是对的。

在应用迁移时,AppUser class 继承自抽象 class,其中包含:

public IEnumerable<Image> Images { get; set; }

谢谢你们的回答,对于我犯下的巨大错误,我深表歉意。