Ā© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•14mo ago•
38 replies
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");
        });
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
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources
Was this page helpful?

Similar Threads

Recent Announcements

Similar Threads

Entity Framework Core Issue - Many to Many relationship
C#CC# / help
2y ago
EF Core Many-to-One (Many Owned Entity to Non-owned Entity)
C#CC# / help
3y ago
[EF Core 8] Many-to-many relationship with payload
C#CC# / help
3y ago
āœ… EF Core Relationship
C#CC# / help
2y ago