更改生成的联接表的名称(多对多)-EF Core 5

Posted

技术标签:

【中文标题】更改生成的联接表的名称(多对多)-EF Core 5【英文标题】:Change name of generated Join table ( Many to Many ) - EF Core 5 【发布时间】:2021-03-03 06:50:35 【问题描述】:

如何更改 EF Core 5 创建的连接表的名称?

例如

 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; 
    

以及这两个名为 FoodMenu 的实体的连接表,我想将其更改为其他内容..

【问题讨论】:

【参考方案1】:

接受的答案缺少我必须努力解决的重要部分。

首先,你需要安装包

Microsoft.EntityFrameworkCore.Relational

然后你可以在你的OnModelCreating重写方法中添加以下内容

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

【讨论】:

如果您安装 EF Core 提供程序,例如 Microsoft.EntityFrameworkCore.SqlServer,那么您不需要安装该软件包 正确,但默认情况下您不安装它。我只有 EF Core 包。 所有ToTableHasColumnName等流式API都需要这个包,对于多对多配置没什么特别的,因此无需明确提及。【参考方案2】:

您可以使用UsingEntity 方法重载之一,例如UsingEntity(Action&lt;EntityTypeBuilder&gt;)

由于是关系流式配置API,首先需要HasMany + WithMany 对,例如

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

【讨论】:

@KonradViltersten 有一种方法 - ***.com/questions/65779730/…,但我不会称它为“聪明”:-) 没有检查过新的 EFC 6.0 已经改进了它(有一些计划,不确定他们是否成功)。 我会选择this,因为我在 EF 上从 5.0.0 升级到 5.0.12,这显然可以工作。确实不够聪明。 (嗯,也许它很聪明但不必要的冗长,IM!HO。)但至少工作。并感谢您的回复。欣赏。

以上是关于更改生成的联接表的名称(多对多)-EF Core 5的主要内容,如果未能解决你的问题,请参考以下文章

实体框架更改生成的多对多表的名称

定义引用同一个表的多对多关系(EF7/core)

如何直接填充由 EF Core 生成的多对多关系连接表?

多对多 EF Core 已被跟踪 - C# Discord Bot

EF Core中通过Fluent API配置多对多关系

EF Core中通过Fluent API配置多对多关系