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