Is it possible to do any type of programmatic data transformation in Entity Framework 5 Code First migrations?
There is an Sql() method to execute queries, but it has return type void and I don't see any way to get the results of the queries I perform.
Example
I have table Recipe with one-to-many relationship to Ingredient. For various reasons I want to convert this to a Ingredients JSON string property instead. The only approach I can think of is something like this:
- Create new column IngredientsJson
- For each recipe, query its ingredients, construct a JSON string programmatically and insert into the new column.
- Drop the old table Ingredient.
You should use db 'initializer' for what you want - and/ore 'Seed' of a sort (as to where to inject into the EF flow).
You can > take a look at this post with a customized < initializer
- that performas both Db Create... and Migrate. It's not cut and paste solution, but mostly works (it was just a fast go at the problem, you'd need to adjust a bit, it has couple fixes below).
MigrateDatabaseToLatestVersion
dose only the migration part - and you need seed
-ing exposed - or manually wrap that part (the main point is in 'checks' done for different situations - i.e. when to 'engage' into migration - or seeding).
Migration should go first, and db 'creation' kind of doesn't make much sense, except for seeding.
You override Seed
(you created) to put any db handling there - you have the DbContext
exposed - and you can also call SqlQuery
if needed.
How to create initializer to create and migrate mysql database?