Reputation: 2202
May be i'm missing something very obvious. But i haven't been able to figure out a way to add a new column to an existing table/model in EF Core.
This is the documentation that I'm following: https://learn.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell
And this is what i have done so far:
So how do i update an already existing table table ? 2 ways i can think of are:
But i feel there should be a better way to do this.
Upvotes: 9
Views: 59036
Reputation: 1
One doesn't need to remove the migration or delete the table. If you want to add a new column to the database table which was already created using add-migration and update-database, one needs to again run the command (add-migration) in nuget package manager console with a new migration name (add-migration "Name2") and then run the command (update-database). The system will know what changes have been made and creates a new migration file but the new column will be added to the same database table where you want to add the column.
Upvotes: 0
Reputation: 19
Update-Database will work if we exclude previous migration from solution and then run update-database cmd. However we can include again for DB definition. Directly it won't work in case of EF core + postgresql.
Upvotes: 0
Reputation: 71
I kinda did a mixture of what @Boney and @StepUp suggested and it ran without hitches. Here's what I did. Assume a have a table Period that I decided to add an additional column PeriodTypeId.
Add-Migration -Name OVCDbMigrationsUpdated -Context DbContext
This created a new migration file with name: OVCDbMigrationsUpdated.
Update-Database -verbose -Migration OVCDbMigrationsUpdated -Context DbContext
My DB was updated successfully with the new column.
Upvotes: 4
Reputation: 38209
This is a way which helped me to add a new column to the existed database without losing data:
I've written this command into Package Manager Console to the Project which contains my Model
add-migration MyFirstMigration
The above command created a class with a lot of code:
public partial class MyFirstMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
...
// The code is omitted for the brevity
...
}
}
I've deleted all generated code and added the following code snippet into the above method Up(MigrationBuilder migrationBuilder)
:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>("Password", "Users", "varchar(255)",
unicode:false, maxLength: 255, nullable: true);
}
Then it is necessary to write the following command into Package Manager Console to add a column into your database:
Update-Database
Upvotes: 4
Reputation: 11
I was running into a similar issue with EF Core and an existing database with some of the model fleshed out, but I was adding a new model (that already had a table) and was getting the error
There is already an object named 'tableN' in the database.
The way I got this to work on an existing database was:
Upvotes: 1
Reputation: 2202
This is how i resolved the issue. Not sure if it is the perfect way.
Key is NOT to delete the initial migration, before you create the new migration.
Adding the steps here:
Upvotes: 7