如何在Entity Framework 4.3.1中禁用迁移?

39

在Entity Framework 4.3.1中有没有禁用迁移的方法?我已经从项目中删除了迁移文件夹以及数据库中生成的表格,但它并没有生效!你如何删除迁移?


1
“it not works” 是什么意思? - Ladislav Mrnka
我的意思是当我删除这些文件和表时,我期望迁移被禁用,但它仍然是启用的。当我运行项目时,会发生关于迁移的错误。 - amiry jd
12
尝试在应用程序启动时添加Database.SetInitializer<YourContextType>(null) - Ladislav Mrnka
可以了,谢谢。但是现在,我该如何使用ef创建数据库? - amiry jd
对于EF6,请参见如何在Entity Framework 6.0中禁用迁移 - Michael Freidgeim
3个回答

40

如果你不想使用迁移,但同时希望EF为你创建数据库,你只需要设置正确的数据库初始化程序:

Database.SetInitializer<YourContextType>(new CreateDatabaseIfNotExists<YourContentType>());

9
新的 CreateDatabaseIfNotExists<YourContentType>()。意思是如果数据库不存在,则创建一个新的<YourContentType>数据库。 - njebert
2
这个实际上应该放在哪个类/文件中? - jep
1
@jep,您的应用程序的入口点。例如global.asax.csProgram.Main - MEMark
4
这在EF6中不适用。微软关闭了它,因为迁移和初始化器之间存在冲突。请参阅http://entityframework.codeplex.com/workitem/1689。 - Alex Edelstein
如何使其始终从头开始重建,即使没有更改?我尝试了许多方法来实现这一点。 - Yoda
在aspnet.core 2.0中,我遇到了错误:“DatabaseFacade”不包含“SetInitializer”的定义。 - alexb

35

删除 Migrations 文件夹对我起了作用。我没有收到任何错误,它将我带回了起始位置。


1
迁移文件夹在哪里?我使用的是EF6 Code-First,但似乎没有找到任何一个。我肯定没有创建过这样的文件夹。 - Alastair Maw

4
我解决这个问题的方法是确保在我的代码中关闭了自动迁移:
internal sealed class Configuration : DbMigrationsConfiguration<YourContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }
}

然后我从数据库中删除了_MigrationHistory表(如果您找不到它,通常会作为系统表创建)


11
因过于模糊而被踩。请问您在代码的哪个部分包含了那个命令? - JBeckton
嗯...好问题JBeckton。我已经有一段时间没有看过那段代码了,而且我不认为我还能在任何地方访问它。我记得它在我的代码的Entity Framework设置部分。我知道这并不是很有帮助,所以对此我深表歉意。 - Buzzrick
10
“AutomaticMigrationsEnabled” 属性位于 /Migrations/Configuration.cs 文件中。 - Joseph Woodward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接