16

I am working on an existing project that uses Entity-Framework 6 with code-first. I have a need to run some SQL before the migrations run.

I have a DbMigrationsConfiguration class with a seed method, but seed runs after the migrations.

I think it will work if I run my SQL in the constructor but I can't get a reference to the context.

Does anyone know how to do this?

1 Answer 1

26

You could use the 'Sql' method within the desired migration class.

public partial class OneOfYourMigrations : DbMigration 
{ 
    public override void Up() 
    { 
        //EF generated migration code here such as
        //CreateTable or AddColumn etc...
        //Now run your custom sql - here I'm doing an update to an existing column
        Sql("UPDATE dbo.YourTable SET Column1 = 'VALUE1' "); 
    } 

    public override void Down() 
    { 
        //EF generated code to rollback
    } 
}     

So the steps are;

  • Generate migration class using Add-Migration
  • Alter the class using code similar to above
  • Run the migration using Update-Database
Sign up to request clarification or add additional context in comments.

3 Comments

Can you explain more detail? I thought migrations run once and only once. This would work if it will run every time but it only seems to run one time.
May be I could be more specific if I knew what kind of SQL you want to run? Is it modification of data (like I mentioned above) or is it something else? FYI, a given migration runs once against a given db, but you can always roll back a given migration - change it (i.e Add Sql) and run it again.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.