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
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
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");
});
39 replies