EntityFrameworkCore - Cannot use table 'AspNetUserRoles' for entity type DeltaIdentityUserRole since it is being used for entity type 'AspNetUserRoles

Viewed 247

I am trying to set many-many relationship with AspNetUserRoles in .Net 6, EntityFrameworkCore but getting error:

Cannot use table 'AspNetUserRoles' for entity type 'DeltaIdentityUserRole' since it is being used for entity type 'AspNetUserRoles (Dictionary<string, object>)' and potentially other entity types, but there is no linking relationship. Add a foreign key to 'DeltaIdentityUserRole' on the primary key properties and pointing to the primary key on another entity type mapped to 'AspNetUserRoles'.

Here is the code:

public class DeltaIdentityUser<T> : IdentityUser<int>
    {
        public virtual UserProfile User { get; set; }
    }
    public class DeltaIdentityRole<T> : IdentityRole<int>
    {
        internal virtual ICollection<UserProfile> UserProfiles { get; set; }
    }
    public class DeltaIdentityUserRole<T> : IdentityUserRole<int>
    {
        public virtual UserProfile User { get; set; }
    }

DB Context:

DeltaContext : DeltaIdentityContext<DeltaIdentityUser<int>, DeltaIdentityRole<int>, int, IdentityUserClaim<int>, DeltaIdentityUserRole<int>, IdentityUserLogin<int>, IdentityRoleClaim<int>, IdentityUserToken<int>>

DBSet:

public virtual DbSet<DeltaIdentityUser<int>> AspNetUser { get; set; } = null!;
        public virtual DbSet<DeltaIdentityUserRole<int>> AspNetUserRoles { get; set; } = null!;
        public virtual DbSet<DeltaIdentityRole<int>> AspNetRole { get; set; } = null!;

On Model Creating:

modelBuilder.Entity<DeltaIdentityUser<int>>(entity =>
            {
                entity.HasOne(d => d.User)
                    .WithOne(p => p.AspNetUser)
                    .HasForeignKey<DeltaIdentityUser<int>>(d => d.Id)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("FK_dbo.AspNetUsers_dbo.UserProfiles_UserId");
            });

            modelBuilder.Entity<DeltaIdentityUserRole<int>>(entity =>
            {
                entity.HasOne(d => d.User)
                    .WithMany(p => p.AspNetUserRoles)
                    .HasForeignKey(d => d.UserId)
                    .HasConstraintName("FK_dbo.AspNetUserRoles_dbo.UserProfiles_UserId");
            });

UserProfile:

public virtual ICollection<DeltaIdentityRole<int>> AspNetRoles { get; set; }
        public virtual DeltaIdentityUser<int> AspNetUser { get; set; }
        public virtual ICollection<DeltaIdentityUserRole<int>> AspNetUserRoles { get; set; }

Here is need to set many-many relationship with userprofile and AspNetUserRoles:

    modelBuilder.Entity<UserProfile>(entity =>
{
            entity.HasMany(d => d.AspNetRoles)
                        .WithMany(p => p.UserProfiles)
                        .UsingEntity<Dictionary<string, object>>(
                            "AspNetUserRoles",
                            l => l.HasOne<DeltaIdentityRole<int>>().WithMany().HasForeignKey("RoleId").HasConstraintName("FK_AspNetUserRoles_AspNetRoles_RoleId"),
                            r => r.HasOne<UserProfile>().WithMany().HasForeignKey("UserId").HasConstraintName("FK_dbo.AspNetUserRoles_dbo.UserProfiles_UserId")
                        ,
                                j =>
                                {
                                    j.ToTable("AspNetUserRoles");
                                });
}

So now when i try to add migration to generate identity schema i get error Cannot use table 'AspNetUserRoles' for entity type 'DeltaIdentityUserRole' since it is being used for entity type 'AspNetUserRoles (Dictionary<string, object>)' and potentially other entity types, but there is no linking relationship. Add a foreign key to 'DeltaIdentityUserRole' on the primary key properties and pointing to the primary key on another entity type mapped to 'AspNetUserRoles'.

WHat i need to get done is UserProfile table should have many-many relation with DeltaIdentityUserRole(AspNetUserRoles table)

0 Answers
Related