2016-02-11 77 views
0

ASP.NET WebAPI應用程序首先在Azure上發佈實體框架代碼。當已經添加遷移時,實體框架會要求更新數據庫

在使用在應用程序啓動時執行的遷移(第一張圖片)發佈後,我無法添加新的遷移並使用數據庫上下文(「支持創建數據庫後'DatabaseContext'上下文已更改的模型」異常)。在添加新的遷移EF斷裂,出現錯誤:

Unable to generate an explicit migration because the following explicit migrations are pending: [migration name]. Apply the pending explicit migrations before attempting to generate a new explicit migration.

看起來像EF好好嘗試一下看到__MigrationHistory表遷移。我檢查了這張表,最後一次遷移存在。

在web.config中只有一個連接字符串。

如果它是重要的,DatabaseContextWithoutCache繼承DatabaseContext(他們有不同的DbConfigurationType)。

在將null初始化程序Database.SetInitializer<DatabaseContext>(null);添加到數據庫上下文後,它可以工作,但我仍然無法添加任何遷移。

爲什麼實體框架沒有看到遷移已經附加到數據庫? update-database中斷,因爲db中已經有表和列。

編輯:

在我的遷移列表2個遷移。我回滾到init(第一次)遷移並刪除第二個。然後添加遷移(現在它包含來自第二次和新更改的更改)並運行update-database。有用。

但EF忽略db是先進的日期和斷裂,出現異常「的模式支持了‘DatabaseContext’背景下,因爲創建數據庫時發生了變化」。

OMG我不明白

first pic

+1

如果你不關心過去的遷移,撕都記錄下來(從代碼中刪除表__MigrationHistory和遷移。現在啓用的遷移,然後創建一個新的基線:add-migration -BaselineName -IgnoreChanges後跟更新數據庫。 –

+0

@SteveGreene我做到了。前2次遷移沒問題,但第3次制動。 –

回答

0

我有這個問題最近在2013年VS如果程序包管理器控制檯運行該命令add-migration {name}(任選加入-startupprojectname {MyProjectName})的EF應生成新的遷移文件爲你。如果遷移文件有任何內容,那麼相信你是不是你應該是,然後你應該在地方,新的遷移運行update-database

不幸的是,它似乎有可能陷入這個循環中(它發生在我身上),並且有很多SO Q &作爲這個問題。非常好運解決它。

0

作爲誤差所暗示的,有對數據庫未決遷移。

從包管理器使用以下命令(替換用自己的價值觀)

update-database -projectname yourprojectname -connectionstring "yourconnectionstring" 

然後,創建新的遷移....

add-migration yournewmigrationname -projectname yourprojectname -connectionstring "yourconnectionstring" 

最後,運行新創建的遷移

update-database -projectname yourprojectname -connectionstring "yourconnectionstring" 
相關問題