Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Entity framework migration - add new column with a value for existing entries

I have an application with Entity Framework Code First.

In a table, I have to add a column. So I added it in the model and created a Migration.

But during the migration, I would like to update the existing entries and add a value for this new column. This value has to be taken from the database (a constant field in my "Configuration" table).

But the default value should only be applied for existing entries, not for the next.

How can I do it from my Migration class ?

My current migration class :

public override void Up()
{
    var theDefaultValue = MyConstants.MyConstantParameterFromDatabase;
    AddColumn("MySchema.MyTable", "MyNewColumn", c => c.Decimal(nullable: false, precision: 18, scale: 2));
}

Edit : still looking for a solution to update all existing entries (with 0 value) but only after this migration...

like image 355
user3544117 Avatar asked Dec 17 '14 09:12

user3544117


People also ask

How do I add a column in EF core?

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).

How do I update my database in migration?

After creating a migration file using the add-migration command, you have to update the database. Execute the Update-Database command to create or modify a database schema. Use the –verbose option to view the SQL statements being applied to the target database.


1 Answers

You simply have to modify the Up() method, and include in it a SQL statement to set the column value in the existing rows. This will only be executed when the database is updated, and the update involves this particular Migration. Thus only the already existing rows will be updated when the Update-Database is invoked.

Add code like this after the AddColumn command, so that the column is already available in the table when the SQL statement runs:

Sql("UPDATE dbo.MyTable SET Column = (SELECT val FROM config)");

NOTE: (SELECT val FROM config) is pseudocode that you must replace with a query that returns the desired value

like image 123
JotaBe Avatar answered Oct 23 '22 04:10

JotaBe