我在MVC4 + EF5應用程序中使用web.config中的單個connectionString,以及使用它的單個DBContext。ASP.NET MVC4 +實體框架5 - SaveChanges()上的數據庫名稱不正確
我有一個簡單的創建控制器。
我已成功在DEV中運行我的應用程序。
我試圖轉移到UAT,這涉及到新的數據庫,所以我更新了的connectionString,並調用SaveChanges()我得到的dbupdate例外,如:
{「無效的對象名稱DBNAME.dbo .TABLENAME'。「}
其中DBNAME是我的DEV數據庫名稱。但是我可以看到正在建立連接來糾正SQL Server實例。我的所有AJAX/JSON表單方法都連接到數據庫就好了..只有當我去保存表單時,我纔會遇到EF試圖在正確的SQL Server上查找錯誤的數據庫的問題。
如果我修改目標表的方式,它不適合我的模型,在SaveChanges()我會反而會抱怨不匹配的異常...所以似乎只有當目標架構是正確的,由於某種原因,EF正在回落到我的DEV DB名稱中。
哪裏可以緩存舊的DB名稱?現在沒有任何地方提及它。我怎樣才能「重置」這個?
編輯:忘了提及我使用Code First,但模式已經存在..我只是手動編寫模型類,而不使用DatabaseMigrations。 編輯2:我剛剛使用Database First重寫了整個應用程序,並且獲得相同的東西!到底他媽發生了什麼?模型或連接字符串中的任何位置未提及的數據庫名稱將從哪裏來?我已經清理/重建瞭解決方案;發佈到另一個網絡框中;刪除臨時ASP.NET文件..我完全失去了!
EDIT3例外:
[SqlException (0x80131904): Invalid object name 'WRONGDATABASENAME.dbo.WorkspaceRequest'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +412
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +59
System.Data.SqlClient.SqlDataReader.get_MetaData() +118
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6384561
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +6386130
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +538
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +28
System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +256
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +19
System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues) +270
System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +536
[UpdateException: An error occurred while updating the entries. See the inner exception for details.]
System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) +11194398
System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) +833
System.Data.Entity.Internal.InternalContext.SaveChanges() +218
[DbUpdateException: An error occurred while updating the entries. See the inner exception for details.]
System.Data.Entity.Internal.InternalContext.SaveChanges() +291
(對不起,懶惰的措辭 - 從來就一直處於這樣永遠和我越來越厭倦和沮喪)
數據庫名稱來自連接字符串。你如何將連接字符串傳遞給你的上下文? – DavidG
我在我的web.config中有一個與我的DBContext匹配的connectionString名稱,但我也嘗試在DBContext構造函數中對連接字符串進行硬編碼。連接字符串指定正確的數據庫名稱名稱 – Yevgeniy