EF6尝试在运行时创建表,但没有等待更改

时间:2016-01-22 16:15:42

标签: c# asp.net .net entity-framework entity-framework-6

我正在为我的ASP.NET项目使用Entity Framework 6.1.3 Code First Migrations。我已禁用自动迁移功能。我运行了Add-MigrationUpdate-Database命令,EF无法在__MigrationHistoryDbContext之间找到任何待处理的更改。但是,当我启动应用程序时,它会尝试从上下文创建表,如果它们已经存在于__MigrationHistory表的最新条目中。 (我确实从迁移表中检查了EDMX XML文件)。你有什么想法,我怎么能解决这个问题,而不会丢失任何数据? tes test test

1 个答案:

答案 0 :(得分:2)

如果您不希望应用程序始终在运行时重新创建表,则必须更改数据库初始化程序。在DBContext课程中,您应该会看到一些类似的代码(假设DBContext被称为MyDbContext):

static MyDbContext()
{
    // You should see this...
    Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());
    // ... or this ...
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());
}

第一个初始化程序将始终重新创建数据库,第二个初始化程序将仅在模型已更改时重新创建数据库。如果未指定初始值设定项,则默认值为CreateDatabaseIfNotExists,顾名思义,如果数据库尚不存在,则会创建数据库。您也可以在配置文件中设置初始化程序。有关更多示例和信息,请参阅this resource