实体框架更改生成的多对多表的名称
Posted
技术标签:
【中文标题】实体框架更改生成的多对多表的名称【英文标题】:Entity Framework change name of generated many to many table 【发布时间】:2021-06-12 12:12:20 【问题描述】:我有一个问题,即为多对多关系生成的表不是我想要的。有没有办法告诉 Entity Framework 给这个表起什么名字?该解决方案有效,我只是对它选择此表的命名方式感到恼火。
我的数据库集
public DbSet<Book> Books get; set;
public DbSet<BookCategory> BookCategories get; set;
我的模型
模型/Book.cs
class Book
[Key]
public int Id get; set;
public string Title get; set;
public string Author get; set;
public int Price get; set;
public int Amount get; set;
public int BookCategoryId get; set;
public List<BookCategory> BookCategories get; set;
模型/BookCategory.cs
class BookCategory
[Key]
public int Id get; set;
public string Name get; set;
public List<Book> Books get; set;
表在 SQL Server Express 中的外观:
所以我想将最终命名为“BookBookCategory”的表格更改为更相关的内容,我该如何处理? :)
编辑
对不起,我的意思是这是多对多的关系,而不是一对多的关系。我希望将表命名为“BookCategoryId”。
【问题讨论】:
你有名字吗?请记住,任何自定义都会产生维护开销,因此请考虑是否真的值得这样做 您可能希望这是一个多对多关系。由您决定是否要在类模型中使用 of 而没有显式连接类。 哦,对了!我的错!它是多对多的关系!我把这两个弄混了。我可能希望该表被称为“BookCategoryId”之类的名称 【参考方案1】:您可以使用 Fluent API 中的 UsingEntity
来配置您的实体类型。
所以,在您的 OnModelCreating
中,您可以有这个:
internal class MyContext : DbContext
public MyContext(DbContextOptions<MyContext> options)
: base(options)
public DbSet<Book> Books get; set;
public DbSet<BookCategory> Tags get; set;
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder
.Entity<Book>()
.HasMany(b => b.BookCategories)
.WithMany(bc => bc.Book)
.UsingEntity(j => j.ToTable("YourCustomName"));
【讨论】:
以上是关于实体框架更改生成的多对多表的名称的主要内容,如果未能解决你的问题,请参考以下文章