我如何禁用代码第一次迁移

我在EF5中有一个代码优先的实体模型。 但我想手动pipe理数据库更改 – 我不希望EF修改我现有的数据库及其所有数据。 但是,当我在EF映射和数据库中进行并行更改时,EF拒绝正确操作告诉我需要使用代码第一次迁移。 如何closures此function?

将Database.SetInitializer设置为null。

public class DatabaseContext: DbContext { //the base accepts the name of the connection string provided in the web.config as a parameter public DatabaseContext() : base("DatabaseContext") { //disable initializer Database.SetInitializer<DatabaseContext>(null); } 

如果你想完全closures迁移:

https://stackoverflow.com/a/9709407/141172

不过,我发现保持代码优先启用迁移效果更好,但使用-Script选项让EF为我创build一个DB更改脚本,以便手动应用到每个数据库(开发,QA,生产):

 Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject 

这样,EF将为我创build更改脚本,并且我仍然完全控制所应用的更改。 我像其他任何源代码一样版本更改脚本。

如果您已经使用迁移,则只更改初始化程序将无济于事。 你需要去pipe理工作室,打开你的数据库表,进入System Tables文件夹,并删除位于那里的__MigrationHistory表(对于EF6和以上,它位于直接在Tables下)。 这将会禁用迁移。

所以我find的最完整的答案是这样的:

  1. 在您的项目中删除Migrations文件夹。
  2. Set Database.SetInitializer<DatabaseContext>(null); 在你的DatabaseContext初始化器中。
  3. 删除数据库中的表__MigrationHistory 。 对于EF6 +,该表位于“ Tables下,但对于早期版本,则位于“ System Tables
  4. build立并运行。
  5. 利润。