Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity Framework Code First - Changing a Table Name

I want to change the name of one of my tables generated using Entity Framework code first.

I have already created the database, but now I want to change the name. I've updated all references to the "Metadatas" table to "Metadata" in my project. But the table that is being generated in the database is still "Metadatas". I've dropped and re-created the database, but that doesn't seem to work either. Neither does using a TableAttribute. What I'm I supposed to do?

Thanks.

[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; } 

...

like image 370
Tums Avatar asked Feb 09 '14 07:02

Tums


People also ask

How do I code first in Entity Framework?

Step 1 − First, create the console application from File → New → Project… Step 2 − Select Windows from the left pane and Console Application from the template pane. Step 3 − Enter EFCodeFirstDemo as the name and select OK. Step 4 − Right-click on your project in the solution explorer and select Manage NuGet Packages…


1 Answers

You have two options here:

Data Annotations:

//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;  } 

or we have Fluent API:

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

Using the Fluent API is the preferred option if you want to ensure your Domain Model stays uncluttered.

Just adding to this, if you solely want to remove the pluralisation of your table names, you can override EFs ability to do so with the following line of code:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } 
like image 147
Stu1986C Avatar answered Sep 22 '22 07:09

Stu1986C