Search code examples
c#entity-framework-coreef-core-5.0

Change name of generated Join table ( Many to Many ) - EF Core 5


How to change name of a join table that EF Core 5 Created ?

for example

 public class Food 
    {
        public int FoodId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Ingredients { get; set; }
        public string PhotoPath { get; set; }
        public ICollection<Menu> Menus { get; set; }
    }

  public class Menu
    {
        public int MenuId { get; set; }
        [Column(TypeName = "date")]
        public DateTime MenuDate { get; set; }
        public bool IsPublished { get; set; }
        public ICollection<Food> Foods { get; set; }
    }

and the join table for this 2 entities named FoodMenu, I want to change it to something else..


Solution

  • You can use one of the UsingEntity method overloads, for instance UsingEntity(Action<EntityTypeBuilder>).

    Since it is a relationship fluent configuration API, you first need HasMany + WithMany pair, e.g.

    modelBuilder.Entity<Food>()
        .HasMany(left => left.Menus)
        .WithMany(right => right.Foods)
        .UsingEntity(join => join.ToTable("TheDesiredName"));