首先,我敢肯定,这一定是以前曾经问过的,但一直无法通过谷歌搜索找到确切的答案,所以请耐心等待。实体框架:添加列需要更改种子数据?
我已经继承了使用迁移的代码第一个实体框架项目。我添加了一个(非空的)列一个表,我需要值插入此列的所有现有项目 - 这是不是默认值:
public override void Up()
{
AddColumn("dbo.QuestionType", "Duplicated", c => c.Boolean(nullable: false, defaultValue: false));
Sql("UPDATE dbo.QuestionType SET Duplicated = 1");
}
但是这里原是增加了一些种子数据到此表:
context.QuestionTypes.AddOrUpdate(
e => e.Name,
new QuestionType() { Name = QuestionTypeNames.INTERVIEWER});
这意味着更新语句会立即被调用Seed方法中的数据覆盖(在每次迁移后调用)。
我的问题是:
- 是否“安全”简单地添加额外的价值到种子数据(或将导致这一切打破早期移民在新的列上不存在数据库)。
- 或者有什么办法可以防止在迁移之后运行Seed方法(以及所有后续的迁移)。
感谢
感谢您确认这一点 - 我没有想过检查迁移是否已应用,听起来像一个可行的方法。仔细查看Seed方法中添加的数据后,有些数据不应该存在(硬编码密码等),所以可能会发现我最好的办法就是从Seed中删除数据方法完全... –
复制将始终存在,因为在运行Seed()之前应用了迁移。 –