2

我正在構建一個使用ASP.NET MVC 4和Entity Framework 5.0的應用程序。我最近了解了您可以在您的數據庫應用程序上實現的EF Code-First Migrations工具。我在PM控制檯中運行了「Enable-Migration」,並且它成功啓用並按照預期創建了「InitialCreate.cs」類,並在表創建中填充了適當的up()和down()方法。實體框架代碼第一個遷移類文件

然後我繼續添加另一個具有2個簡單屬性(id,name)的類(Category.cs),並希望將此遷移添加到數據庫。我跑「添加遷移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. 

它創造了遷移文件夾遷移文件,但是當我打開了「的.cs」文件,它創建的,向上( )和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

你有一個或兩個遷移文件(configuration.cs除外)嗎? – SOfanatic

+0

現在它顯示了兩個,InitialCreate和AddCategoryClass。但第二個在你的配置類中有空白方法 – Sixers17

+0

是'AutomaticMigrationsEnabled = true'? –

回答

2

這很可能是因爲您有一個數據庫初始值設定項,無論遷移如何,都始終保持數據庫與模型同步。

查看__MigrationHistory,您可能會看到該架構已由MigrateDatabaseToLatestVersion initializer更新。 MigrationId將類似於201307290913337_AutomaticMigration

要解決該問題,請刪除數據庫,註釋對模型所做的更改,運行Update-Database - 現在評論更改並再次添加遷移。

如果__MigrationHistory表的最後一條記錄的確是xxxxxxx_AutomaticMigration一個,你可以刪除它,然後再次運行Add-Migration和遷移類應該有一些在其UpDown方法有用。

您應該確保在尚未進行更改時運行Add-Migration

+0

是的我有一個數據庫初始化,如下所示:Database.SetInitializer (新的DropCreateDatabaseIfModelChanges ()); 你能指示我到這個遷移歷史記錄表嗎?我沒有看到它在遷移文件夾或我的數據庫本身。我明白你在說什麼。我是否需要以不同的方式初始化數據庫,或者只是使其能夠正確使用自動遷移? – Sixers17

+0

對不起,我找到了。它不在VS的服務器資源管理器中顯示,但在SQL Management Studio中顯示。我會試一試,讓你知道。 – Sixers17

+0

工作正常!謝謝你,先生。 – Sixers17