实体框架遇到无效的列名问题

时间:2019-01-29 10:25:21

标签: c# .net entity-framework linq

我在当前项目中使用实体框架。在将代码部署到生产中之后,我们开始面临以下问题。

  

2019-01-28 13:55:28.5528 UTC + 0000错误:   DatabaseService.QueryAuthentication   System.Data.EntityCommandExecutionException:发生错误   执行命令定义。有关详细信息,请参见内部异常。   ---> System.Data.SqlClient.SqlException:无效的列名'GcdId'。在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   布尔值breakConnection,动作为1 wrapCloseInAction),位于   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException   异常,布尔值breakConnection,在以下位置执行Action'1 wrapCloseInAction)   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj,布尔值调用者HasConnectionLock,布尔值asyncClose)   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj,Boolean&dataReady)   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()在   System.Data.SqlClient.SqlDataReader.get_MetaData()在   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,   RunBehavior runBehavior,字符串resetOptionsString)在   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior   cmdBehavior,RunBehavior,runBehavior,布尔returnStream,布尔   异步,Int32超时,任务和任务,布尔asyncWrite,SqlDataReader   ds,布尔值describeParameterEncryptionRequest),位于   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior   cmdBehavior,RunBehavior,runBehavior,布尔值returnStream,字符串   方法,TaskCompletionSource`1完成,Int32超时,任务和任务,   布尔值asyncWrite)在   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior   cmdBehavior,RunBehavior,runBehavior,布尔值returnStream,字符串   方法)   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior   行为,String方法)在   System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior   行为)   System.Data.Common.DbCommand.ExecuteReader(CommandBehavior行为)
  在   System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand   entityCommand,CommandBehavior行为)---内部异常结束   堆栈跟踪---   System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand   的entityCommand,CommandBehavior行为)   System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute [TResultType](ObjectContext   上下文,ObjectParameterCollection parameterValues)位于   System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1   forMergeOption)   System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()   在System.Linq.Enumerable.First [TSource](IEnumerable`1源)处   System.Data.Objects.ELinq.ObjectQueryProvider。<> c__11`1.b__11_0(IEnumerable`1   顺序)   System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle [TResult](IEnumerable`1   查询,表达式queryRoot)在   System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute [S](表达式   表达式)   System.Data.Entity.Internal.Linq.DbQueryProvider.Execute [TResult](表达式   表达式)位于System.Linq.Queryable.First [TSource](IQueryable`1   来源)

我们遵循的步骤如下:

  1. 由于无法访问Prod Db,因此我们从Test Db生成实体。 EF5用于生成实体,我们使用了数据库优先方法。

  2. 我们为需要部署的应用程序创建一个设置。

  3. Prod Db已使用Db脚本更新。 Prod和Test Db的结构在表和列方面都是相同的。

  4. 该应用程序是通过安装程序安装在客户端计算机上的。

  5. 当客户端启动应用程序时,即使Db表中存在该列,也会弹出上述错误。

任何人都可以指导我们此问题的根本原因以及解决此问题的可能解决方案。

1 个答案:

答案 0 :(得分:0)

在应用程序中查看显示错误的函数或过程,也请尝试使用try。有时,实体框架使用不同的名称保存实体。也请进行检查。