C# 获取实体框架的无效列名问题

C# 获取实体框架的无效列名问题,c#,.net,entity-framework,linq,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.S

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

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异常, 布尔断开连接,操作'1 wrapCloseInAction)位于 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔断开连接,操作'1 wrapCloseInAction)位于 System.Data.SqlClient.TdsParser.ThroweException和Warning(TdsParserStateObject stateObj、布尔调用方连接锁、布尔异步关闭)位于 System.Data.SqlClient.TdsParser.TryRun(运行行为, SqlCommand cmdHandler、SqlDataReader数据流、, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj、Boolean和dataReady)位于 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()位于 System.Data.SqlClient.SqlDataReader.get_MetaData()位于 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, 运行行为运行行为,字符串重置选项字符串)位于 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior、RunBehavior、Boolean returnStream、Boolean 异步、Int32超时、任务和任务、布尔异步写入、SqlDataReader ds,布尔描述参数(加密请求) System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、布尔返回流、字符串 方法,TaskCompletionSource`1完成,Int32超时,任务和任务, 布尔异步(写)在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior、RunBehavior、布尔返回流、字符串 方法)在 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为,字符串方法)在 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为)在 System.Data.Common.DbCommand.ExecuteReader(命令行为)
在 System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior)--内部异常结束 堆栈跟踪--at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior)位于 System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext 上下文,ObjectParameterCollection parameterValues)位于 System.Data.Objects.ObjectQuery`1.GetResults(可空`1 forMergeOption)在 System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() 在System.Linq.Enumerable.First[TSource](IEnumerable`1 source)处 System.Data.Objects.elink.ObjectQueryProvider.c_uuu11`1.b_uu11`0(IEnumerable`1 序列)在 System.Data.Objects.Elink.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 查询,表达式queryRoot)位于 System.Data.Objects.Elink.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[S](表达式 表达式)在 System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](表达式 表达式)位于System.Linq.Queryable.First[TSource](IQueryable`1 (来源)

我们遵循的步骤如下:


  • 我们从测试数据库生成实体,因为我们没有访问Prod Db的权限。EF5用于生成实体,我们使用数据库优先的方法

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

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

  • 应用程序通过安装程序安装在客户端计算机上

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


  • 任何人都可以告诉我们这个问题的根本原因是什么以及可能的解决方案。

    在应用程序中检查它显示错误的函数或过程,也可以使用try-catch。有时实体框架会用不同的名称保存enitites。也要检查一下。

    发布代码和表架构,而不是描述它们。很可能entity类的属性在目标表“We generate Entities from Test Db”中不存在,但prod中缺少一列。我想您已经找到了问题所在!System.Data.SqlClient.SqlException:列名“GcdId”无效无法找到此列?命名差异?@Panagiotis,表和映射中都有一个属性。应用程序在测试环境中工作正常。请使用SQL Server探查器查看向SQL Server发送的查询。