我在 EF5 中有一个代码优先的实体模型。但我想手动管理数据库更改——我不希望 EF 修改我现有的数据库及其所有数据。但是当我在 EF 映射和数据库中进行并行更改时,EF 拒绝正常运行,告诉我需要先使用代码迁移。我该如何关闭它?
问问题
99024 次
5 回答
105
将 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);
}
于 2015-04-01T15:26:00.493 回答
44
所以我找到的最完整的答案是:
- 删除
Migrations
项目中的文件夹。 Database.SetInitializer<DatabaseContext>(null);
在 DatabaseContext 初始化程序中设置。- 删除
__MigrationHistory
数据库中的表。对于 EF6+,该表位于下面,Tables
但对于早期版本,它位于System Tables
. - 构建并运行。
- 利润。
于 2016-11-11T08:06:16.563 回答
28
如果您想完全关闭迁移:
https://stackoverflow.com/a/9709407/141172
但是,我发现启用代码优先迁移会更好,但使用-Script
选项让 EF 为我创建一个数据库更改脚本,我可以手动将其应用于每个数据库(开发、QA、生产):
Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
这样 EF 将为我创建更改脚本,并且我仍然可以完全控制正在应用的更改。我像任何其他源代码一样对更改脚本进行版本控制。
于 2013-02-01T20:02:10.703 回答
26
如果您已经使用过 Migrations,那么仅更改 Initializer 将无济于事。您需要转到 Management Studio,打开您的数据库表,转到System Tables
文件夹并删除__MigrationHistory
位于那里的表(对于 EF6 及更高版本,它位于直接下方Tables
)。这将永久禁用迁移。
于 2013-08-08T09:13:55.220 回答
2
我刚刚解决了这个“问题”
- 从数据库中删除表“_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
于 2018-09-10T02:59:54.290 回答