Change data in migration Up method - Entity Framework

心已入冬 提交于 2019-11-28 19:07:44

In the middle of a migration, it's better to use Sql() method to update database data.

Sql("UPDATE dbo.RequestValidationErrors SET IsBreaking = 0 WHERE WordCode = 'RequestValidationError.MoreThanOneItemFound'");

Also you should define the default value for the new column. So the solution should be something like this:

public override void Up()
{
    AddColumn("dbo.RequestValidationErrors", "IsBreaking", c => c.Boolean(nullable: false, default: true));
    Sql("UPDATE dbo.RequestValidationErrors SET IsBreaking = 0 WHERE WordCode = \"RequestValidationError.MoreThanOneItemFound\"");
}

Using a DbContext in the middle of it's migration is very ambiguous. What do you expect from the context? It has the after migration state in its models, but the database has the before migration state in the tables. So the model and database are not match. If you still insist on using DbContext in your code, disabling model checking might be the solution. You can disable model checking using:

Database.SetInitializer<Log4ProContext>(null);

If you want to use the framework for changes like this, you should separate Database changes from Data changes.

Create a migration for just the Database changes, and execute.

Then create a new migration (the Up() and Down() methods will be empty). You can now instantiate your DatabaseContext and there will be no error. This way you can use the Framework for these changes, and properly implement a Down() method.

Instead of using the Sql method you could also use the UpdateData method.

migrationBuilder.UpdateData(
    table: "RequestValidationErrors", 
    keyColumn: "WordCode", 
    keyValue: "RequestValidationError.MoreThanOneItemFound", 
    column: "IsBreaking", 
    value: false);

(I don't know if only ef core supports this method)

Writing DataMigrations for EF6 can be a chore. We put together a library I'm just open sourcing here for others to use, that adds in this long-promised, missing feature to EF6. Just write classes using regular EF queries etc.

https://github.com/b9chris/Brass9.Data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!