2014-11-14 29 views
0

我在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 

(對不起,懶惰的措辭 - 從來就一直處於這樣永遠和我越來越厭倦和沮喪)

+0

數據庫名稱來自連接字符串。你如何將連接字符串傳遞給你的上下文? – DavidG

+0

我在我的web.config中有一個與我的DBContext匹配的connectionString名稱,但我也嘗試在DBContext構造函數中對連接字符串進行硬編碼。連接字符串指定正確的數據庫名稱名稱 – Yevgeniy

回答

1

我發現了這個問題。結果是EF消耗了ODBC異常,並且我在目標表上產生了一個無效的觸發器(指向舊的DB名稱),從而產生了冒泡到調試器的異常。

0

搜索整個解決方案「WRONGDATABASENAME。 dbo.WorkspaceRequest'

您應該能夠在您的edmx文件的XML視圖中看到它。

此外,請嘗試從edmx中刪除所有項目並再次更新它?

+0

謝謝。已經嘗試過。該名稱不會出現在源代碼中的任何位置。我建立了一個全新的EDMX(以前沒有 - 只有.cs模型類)。還是同樣的問題 – Yevgeniy

相關問題