ASP.NET MVC4 +实体框架5 - SaveChanges()上的DB名称不正确

时间:2014-11-14 00:16:59

标签: asp.net-mvc entity-framework

我在web.config中使用单个connectionString的MVC4 + EF5应用程序,以及使用它的单个DBContext。

我有一个简单的创建控制器。

我已成功在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。 EDIT2:我只是使用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

(抱歉懒惰的措辞 - 我一直在这里,并且感到疲倦和沮丧)

2 个答案:

答案 0 :(得分:1)

我发现了这个问题。原来EF消耗了ODBC异常,我在目标表上有一个无效的触发器(指向旧的DB名称),产生了冒泡到调试器的异常。

答案 1 :(得分:0)

搜索整个解决方案' WRONGDATABASENAME.dbo.WorkspaceRequest'

您应该能够在edmx文件的XML视图中看到它。

另外,尝试从edmx中删除所有项目并再次更新它?