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

Time:09-02

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"));

}

CodePudding user response:

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. :)

  • Related