Search code examples
entity-frameworkentity-framework-coreentity-framework-6

How to user entity framework Map() method in Entity Framework Core 6


How to user Map method in Entity Framework Core 6. After upgrading to Entity Framework Core 6 the Map() method no longer works. Is there something similar I can use to Map the columns to a table?

Example of my code below.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
            foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
            {
                relationship.DeleteBehavior = DeleteBehavior.Restrict;
            }

            modelBuilder.Entity<RoleGroup>()
               .HasMany(c => c.Roles).WithMany(i => i.RoleGroups).Map(t => t.MapLeftKey("RoleGroupId")
                .MapRightKey("RoleId")
                .ToTable("RoleGroupRole"));

}

Solution

  • Most examples for EF Core have a RoleGroupRole entity defined, but they do support using a Dictionary<string, object> for a shadow entity placeholder for basic joining tables:

    modelBuilder.Entity<RoleGroup>
      .HasMany(u => u.Roles)
      .WithMany(g => g.RoleGroups)
      .UsingEntity<Dictionary<string, object>>(
                    right => right
                        .HasOne<Role>()
                        .WithMany(),
                    left => left
                        .HasOne<RoleGroup>()
                        .WithMany(),
                    join => join
                        .ToTable("RoleGroupRoles"));
    

    The gotcha with this configuration is that the expressions for the two sides goes "Right" then "Left", it's easy to get them backwards. :)