![](/img/trans.png)
[英]'The model backing the '' context has changed since the database was created' - in different project
[英]The model backing the '--Context' context has changed since the database was created - but db is new production database
我已經第762次遇到此錯誤,但是這一次,在嘗試訪問我的生產站點時,在刪除Azure上的“生產”數據庫然后發布我的站點后,我立即得到它。
The model backing the 'PropertyContext' context has changed since the database was created. Consider using Code First Migrations to update the database
我刪除了數據庫,因為無法以其他任何方式解決此問題,但仍然無法正常工作。
一些要點:
我已經在Global.asax中嘗試了以下方法(在兩個項目中)
Database.SetInitializer PropertyContext>(空); <-所以我不會讓第一個<
和
Database.SetInitializer(new MigrateDatabaseToLatestVersion<PropertyContext, MyConfiguration>());
new PropertyContext().Database.Initialize(true);
我正在使用.net 4.5
為什么在新數據庫上出現此錯誤,如何使該站點正常工作?
只是在ASP.Net應用程序中遇到了相同的錯誤。 在我的情況下,我沒有使用Code First,但是我使用了標准的ASP.Net身份驗證提供程序,該提供程序顯然使用了Code First,並且由於此問題而導致身份驗證被破壞。
對我來說,解決方案是刪除dbo.__MigrationHistory
表,此后身份驗證開始正常工作。 意識到! 此解決方案並不適合所有人! 這樣可以解決問題,但是有潛在的風險。
ASP.Net身份驗證提供程序會自動在數據庫中創建表:
默認情況下,這些表為空,如果您尚未為網站創建任何新的登錄名,則可以使用上面的“快速而又骯臟”的解決方案。 如果您確實關心保留用戶信息,或者只是想了解Code First遷移的工作方式,請按照以下步驟操作:
<connectionStrings>
元素下的記錄之一。 打開軟件包管理器控制台:
工具–>庫軟件包管理器–>軟件包管理器控制台
Update-Database -ConnectionStringName MyConnectionStringName
將MyConnectionStringName替換為您在web.config中查找的實際名稱。
作為此命令的結果,您將看到一個新文件夾“ Migrations”,其中包含由Update-Database
命令生成的一堆代碼。 重建並重新部署您的應用程序,新的遷移代碼將在啟動時執行,並使數據庫架構與ASP.Net身份驗證提供程序代碼的更新版本同步。
當將Code First與Migrations一起使用時,數據庫將創建一個名為__MigrationHistory
的表來跟蹤當前模式。 當您運行應用程序時,實體框架將檢查該表以確保數據庫架構與您的數據庫實體匹配。 如果它們不匹配,則會出現此錯誤。
要更新數據庫,請按照下列步驟操作:
DbContext
的項目。 App.Config
/ Web.Config
文件的項目是“設置為啟動項目”(如果您有多個Config,則它必須是定義了數據庫連接字符串的項目。 Update-Database -ConnectionStringName MyConnString
,其中MyConnString
是App.Config
/ Web.Config
連接字符串的名稱 (而不是實際的連接字符串) 如果出現這樣的錯誤:“由於存在未決的更改並且自動遷移被禁用,因此無法更新數據庫以匹配當前模型。”
您應該啟用自動遷移,然后重試。 啟用自動遷移
Migrations
文件夾中(在具有DbContext
的項目中),打開Configuration.cs
。 AutomaticMigrationsEnabled = true;
要阻止Entity Framework / DbContext監視數據庫上的更改,您只需刪除數據庫中的__MigrationHistory
表即可。 然后由您決定確保數據庫保持手動更新。
解決方案是使用靜態方法SetInitializer並將Null值綁定到上下文。 如果您使用的是Web解決方案,則編寫代碼的最佳位置是Global.asax.cs文件的Application_Start。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
//...
Database.SetInitializer<MyContext>(null);
}
今天早上我遇到了類似的問題。 突然出現錯誤,無法解決:
The model backing the 'ApplicationDbContext' context has changed since
the database was created. Consider using Code First Migrations to update
the database
我有一個MVC項目,另一個有模型,上下文和存儲庫項目。 我已經研究了好幾個星期,但是今天它停止了。
我試圖刪除數據庫,啟用遷移,添加遷移和更新數據庫的次數太多了,以至於我數不清了。 我已經將初始化程序添加到MigrateDatabaseToLatestVersion以及DropCreateDatabaseIfModelChanges。 一切都是徒勞...
最終使它工作的是將模型,上下文和存儲庫移入MVC項目(這不是我熱衷的事情)……然后它可以直接使用,而無需更改任何代碼(除了名稱空間)! 很奇怪...
為了解決這個問題,我白天讀了很多博客文章。 其中一個(我不知道哪個)提到了Visual Studio 2013中的一個錯誤,該錯誤中的DLL文件的引用並非總是按應有的方式更新,這表明我在運行添加遷移和更新時,我的MVC項目丟失了某些內容數據庫在我的單獨項目中。 但這只是一個猜測。
我在解決方案中使用EF 6.1和.Net 4.5.1。
有類似的問題! 答案在這里http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc3/cs/adding-a-new-field
(Rick Anderson)有兩種方法可以解決該錯誤:
讓實體框架根據新的模型類架構自動刪除並重新創建數據庫。 在測試數據庫上進行主動開發時,此方法非常方便,因為它使您可以快速一起發展模型和數據庫模式。 但是,不利的一面是您丟失了數據庫中的現有數據,因此您不想在生產數據庫中使用這種方法!
明確修改現有數據庫的架構,使其與模型類匹配。 這種方法的優點是可以保留數據。 您可以手動進行更改,也可以通過創建數據庫更改腳本進行更改。
我已經花了幾個小時試圖解決這個問題。 一個項目正在工作,而另一個則沒有。
我有不同的項目引用了不同版本的Entity Framework
。 就我而言,我有一個Console應用程序和一個Windows Service應用程序,都引用了包含代碼第一類和DbContext
的第三個項目。
運行Update-Package EntityFramework
之后,在兩個項目中一切都正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.