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

Tum*_*ums 25 .net c# entity-framework

我想先更改使用Entity Framework代码生成的其中一个表的名称.

我已经创建了数据库,但现在我想更改名称.我在项目中更新了对"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; }
Run Code Online (Sandbox Code Playgroud)

...

Stu*_*86C 47

你有两个选择 -

数据注释:

//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; 
}
Run Code Online (Sandbox Code Playgroud)

或者我们有流利的Api:

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

如果要确保域模型保持整洁,则使用Fluent Api是首选选项.

只是添加到此,如果您只想删除表名的复数,则可以使用以下代码行覆盖EF的功能:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
Run Code Online (Sandbox Code Playgroud)

  • 我想我正在丢失我的弹珠......我只是用谷歌搜索"如何重命名实体框架中的数据库表",来到这个StackOverflow问题,并意识到我是几个月前回答它的人!:) (32认同)
  • 实体框架将把你的类的名称复数化,就像它看待它的方式一样,如果你有一个名为“Dog”的类,例如,当几个 Dog 对象持久化到数据库时,你将拥有一个“Dogs”的集合“。我可以看到你的问题,因为元数据既是单数也是复数。如果你有一个名为“Fish”的类(一个名为“Fishs”的表),你也会遇到同样的问题。 (2认同)
  • 这在`DBContext`派生类fyi中进行 (2认同)