2017-04-27 100 views
0

我第一次和遷移使用EF代碼有一個ASP.NET MVC項目。遷移與實體框架6碼第一

我想一個新的屬性添加到一個類。爲此,我創建了遷移代碼,以便在與該類相關的表中添加特定列。

我的遷移代碼如下:

public partial class Add_DataRequisicao_to_BiblRequisicao : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("dbo.BiblRequisicoes", "DataRequisicao", c => c.String(nullable: false, defaultValue: "01/01/1900 00:00")); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.BiblRequisicoes", "DataRequisicao"); 
    } 
} 

而且屬性添加到類如下:

[Required] 
[Display(Name = "Data Requisição")] 
public string DataRequisicao { get; set; } 

當我發佈該項目並轉到項目網站,我收到以下錯誤消息:

無法更新數據庫以匹配當前模型,因爲有掛起的c掛起和自動遷移被禁用。將掛起的模型更改寫入基於代碼的遷移或啓用自動遷移。將DbMigrationsConfiguration.AutomaticMigrationsEnabled設置爲true以啓用自動遷移。

檢查數據庫,我看到遷移是成功運行的,因爲該列已創建。在遷移表中,還有一個新條目表明遷移運行。

遷移項:

MigrationId: 201704261436437_Add_DataRequisicao_to_BiblRequisicao 
ContextKey: WebAppInvestigacaoMultimedia.Migrations.Configuration 
Model: 0x1F8B0800000... 
ProductVersion: 6.1.3-40302 

我不明白爲什麼我得到錯誤信息,如果遷移成功的名稱和屬性的類型RAN是一樣的附加列表。

+0

您是如何創建遷移的?你使用了Add-Migration還是你自己添加了這個類? – Gimly

+0

您是否使用自動或基於代碼的遷移?從代碼示例中提供的2種方法中,我認爲您正在使用'Add-Migrations',這意味着基於代碼的遷移。在包管理器控制檯中使用'-Verbose -Script'標誌來查看數據庫腳本和執行遷移過程的步驟。 –

+0

@Gimly我用添加遷移 – miguelbgouveia

回答

1

這個錯誤通常是與還沒有被添加到遷移腳本尚未改變模型。

如果你看看你有你的遷移文件夾,你應該有resx文件,這些文件包含生成遷移時模型的「快照」。因此它知道是否有對模型進行的更改,並且如果存在未決的更改,則不會讓您執行更新數據庫。

要解決此問題,您可能已回滾你的模型,因爲你的最後一次遷移所做的任何更改,或創建一個使用添加遷移新的遷移,然後做更新的數據庫。

如果你和一個團隊一起工作,這些問題如果您和其他人所做的更改模型或創建遷移時有發生。查詢this interesting MSDN article以瞭解如何利用這些問題。

+0

問題是我在添加類屬性之前通過添加遷移命令創建遷移代碼。創建屬性首先解決我的問題。 – miguelbgouveia

+0

遷移工具非常強大,它將直接爲您對模型進行的大部分更改創建良好的遷移腳本。儘管要注意破壞性更改,但可能會丟失數據。祝你好運。 – Gimly