C#C
C#•13mo ago
Miner28_3

EF Core Many to Many relationship through Entity

Hello there :Wave:
I'm having a weird issue with EF Core that I think I got lost in šŸ˜… I got a mostly Scaffolded Database with couple changes I've been trying to do -
I got something that looks sorta like this

public partial class DiscordMember
{
    public long Id { get; set; }
    public virtual ICollection<DiscordRole> Roles { get; set; } = new List<DiscordRole>();
}

public partial class DiscordRole
{
    public long Id { get; set; }
    public virtual ICollection<DiscordMember> Members { get; set; } = new List<DiscordMember>();
}

public partial class DiscordMemberRole
{
    public int Id { get; set; }

    public long? MemberId { get; set; }

    public long? RoleId { get; set; }

    public virtual DiscordMember Member { get; set; }

    public virtual DiscordRole Role { get; set; }
}

// OnModelCreating
// DiscordMember 
            entity.HasMany(m => m.Roles)
                .WithMany(r => r.Members)
                .UsingEntity<DiscordMemberRole>(
                    join => join
                        .HasOne(j => j.Role)
                        .WithMany()
                        .HasForeignKey(j => j.RoleId)
                        .HasConstraintName("discord_member_roles_role_id_fkey"),
                    join => join
                        .HasOne(j => j.Member)
                        .WithMany()
                        .HasForeignKey(j => j.MemberId)
                        .HasConstraintName("discord_member_roles_member_id_fkey"),
                    join =>
                    {
                        join.ToTable("discord_member_roles"); // Explicitly set the join table name
                        join.Property(j => j.RoleId).HasColumnName("role_id"); // Map to actual column
                        join.Property(j => j.MemberId).HasColumnName("member_id"); // Map to actual column
                    });
//DiscordMemberRole
        modelBuilder.Entity<DiscordMemberRole>(entity =>
        {
            entity.HasKey(e => e.Id).HasName("discord_member_roles_pkey");

            entity.ToTable("discord_member_roles");

            entity.HasIndex(e => e.MemberId, "discord_member_roles_member_id");

            entity.HasIndex(e => e.RoleId, "discord_member_roles_role_id");

            entity.Property(e => e.Id).HasColumnName("id");
            entity.Property(e => e.MemberId).HasColumnName("member_id");
            entity.Property(e => e.RoleId).HasColumnName("role_id");
            
            entity.HasOne(d => d.Member)
                .WithMany()
                .HasForeignKey(d => d.MemberId)
                .HasConstraintName("discord_member_roles_member_id_fkey");

            entity.HasOne(d => d.Role)
                .WithMany()
                .HasForeignKey(d => d.RoleId)
                .HasConstraintName("discord_member_roles_role_id_fkey");
        });

But I'm in a "loop" of errors, based on what changes I do I get different error when trying to Include .Roles in discord Member query
Was this page helpful?