Armin Shoeibi
Armin Shoeibi

Reputation: 670

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

Upvotes: 32

Views: 14171

Answers (2)

Yahya Hussein
Yahya Hussein

Reputation: 9101

The accepted answer is missing an important part I had to struggle with.

First, you need to install the package

Microsoft.EntityFrameworkCore.Relational

Then you can add the following in your OnModelCreating overridden method

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

Upvotes: 8

Ivan Stoev
Ivan Stoev

Reputation: 205539

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

Upvotes: 60

Related Questions