更改生成的联接表的名称(多对多)-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 包。 所有ToTable
、HasColumnName
等流式API都需要这个包,对于多对多配置没什么特别的,因此无需明确提及。【参考方案2】:
您可以使用UsingEntity
方法重载之一,例如UsingEntity(Action<EntityTypeBuilder>)
。
由于是关系流式配置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的主要内容,如果未能解决你的问题,请参考以下文章