我正在使用带有Entity Framework 5.0的ASP.NET MVC 4构建应用程序。我最近了解了可以在您的数据库应用程序上实现的EF Code-First Migrations工具。我在PM控制台中运行了“启用 - 迁移”,并且它成功启用并按预期创建了“InitialCreate.cs”类,并使用表创建填充了相应的up()和down()方法。
然后我继续添加另一个具有2个简单属性(id,name)的类(Category.cs),并希望将此迁移添加到数据库中。我在我的PM中运行了“Add-Migration AddCategoryClass”来获取此消息:
Scaffolding migration 'AddCategoryClass'.
The Designer Code for this migration file includes a snapshot of your current Code
First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration 201307301938256_AddCategoryClass' again.
它在Migrations文件夹中创建了迁移文件,但是当我打开它创建的“.cs”文件时,Up()和Down()方法为空。我期待它创建一个表并分别添加字段。出于好奇,我运行了“Update-Database”并成功完成了(在Configuration.cs文件中更改AutomaticMigration = true之后)。当我构建我的应用程序时,该表出现在数据库中。
所以我的问题是 - >为什么Up()和Down()方法是空白的?
对于记录,如果Configuration.cs文件中的AutomaicMigrations = false,则“Update-Database”命令不起作用;给我以下错误:
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
我假设这些不应该是这样,将来有助于查看我的迁移并看看我做了什么。任何帮助或指导都会很棒。先谢谢你。
我在Win 7 64bit上使用VS 2012。
答案 0 :(得分:3)
这可能是因为您有一个数据库初始化程序,它始终使数据库与模型保持同步,无论迁移如何。
查看__MigrationHistory
,您可能会看到MigrateDatabaseToLatestVersion
initializer更新了架构。 MigrationId
将类似于201307290913337_AutomaticMigration
。
要修复它,请删除数据库,注释掉模型的更改,运行 Update-Database
- 现在注释更改,然后再次添加迁移。
如果__MigrationHistory
表的最后一条记录确实是xxxxxxx_AutomaticMigration
表,您可以删除它并再次运行Add-Migration
,并且您的迁移类应该有一些有用的内容{ {1}}和Up
方法。
您应该确保在尚未进行更改时运行Down
。