如何禁用代码首次迁移
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁用代码首次迁移相关的知识,希望对你有一定的参考价值。
我在EF5中有一个代码优先的实体模型。但我想手动管理数据库更改 - 我不希望EF修改我现有的数据库及其所有数据。但是当我在EF映射和数据库中进行并行更改时,EF拒绝正常运行,告诉我需要先使用代码迁移。我怎么关掉这个?
答案
将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);
}
另一答案
所以我找到的最完整的答案是:
- 删除项目中的
Migrations
文件夹。 - 在DatabaseContext初始值设定项中设置
Database.SetInitializer<DatabaseContext>(null);
。 - 删除数据库中的表
__MigrationHistory
。对于EF6 +,该表位于Tables
下,但对于早期版本,它位于System Tables
下。 - 建立并运行。
- 利润。
另一答案
如果要完全关闭迁移:
https://stackoverflow.com/a/9709407/141172
但是,我发现最好保持代码首次迁移,但是使用-Script
选项让EF为我创建一个DB更改脚本,我可以手动应用于每个数据库(开发,QA,生产):
Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
这样EF就会为我创建更改脚本,而且我仍然可以完全控制所应用的更改。我像其他源代码一样对更改脚本进行版本控制。
另一答案
如果您已经使用过迁移,那么仅更改初始化程序将无济于事。您需要转到Management Studio,打开数据库表,转到System Tables
文件夹并删除位于那里的__MigrationHistory
表(对于EF6及更高版本,它位于Tables
正下方)。这将禁用迁移。
另一答案
我刚解决了这个“问题”
- 从数据库中删除表“_MigrationHistory”。
- 从项目中删除“迁移”文件夹。
- 更新EDMX文件。
- 清理项目并重建它。
我的环境是
1. Visual Studio 2017 15.8.2
2. ASP NET MVC project
3. .NET Framework 4.6.1
4. Entity Framework 6.2.0
以上是关于如何禁用代码首次迁移的主要内容,如果未能解决你的问题,请参考以下文章