.net 实体框架代码优先-更改表名

relj7zay  于 2023-07-01  发布在  .NET
关注(0)|答案(2)|浏览(121)

我想先更改使用实体框架代码生成的表的名称。
我已经创建了数据库,但现在想更改名称。我已经将项目中所有对"Metadatas"表的引用更新为"Metadata"。但是在数据库中生成的表仍然是“Metadatas”。我已经删除并重新创建了数据库,但这似乎也不起作用。使用TableAttribute也是如此。我该怎么办?
谢谢

[Table("Metadata")]
public class Metadata 
{
    [Required, Key]
    public int MetadataId { get; set; }

    [Required, ScaffoldColumn(false)]
    public int DocumentId { get; set; }

    [Required, StringLength(250), DataType(DataType.Text)]
    public string Title { get; set; }

...

vhipe2zx

vhipe2zx1#

您有两个选择:
数据注解:

//Changing database table name to Metadata
[Table("Metadata")]
public class Metadata 
{
  [Required, Key]
  public int MetadataId { get; set; }

  [Required, ScaffoldColumn(false)]
  public int DocumentId { get; set; }

  [Required, StringLength(250), DataType(DataType.Text)]
  public string Title { get; set; 
}

或者我们有Fluent API:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  //Changing Database table name to Metadata
  modelBuilder.Entity<Metadata>()
      .ToTable("Metadata");
}

如果你想确保你的领域模型保持整洁,使用Fluent API是首选。
除此之外,如果你只想删除表名的复数形式,你可以用下面的代码行覆盖EF的功能:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
toiithl6

toiithl62#

如果您的DbContext上有一个DbSet<T>属性,那么EF可以从该位置获取表名。重命名该属性并运行新迁移以重命名该表。

相关问题