Entity Framework更新EDMX遇EntityCommandExecutionException错误求助
解决EDMX从数据库更新时的查询提示错误
问题原因
该错误源于Entity Framework在生成更新模型的查询时,默认加入了OPTION (FORCE ORDER)这类查询提示,而你的SQL Server环境无法处理这类提示,导致查询计划生成失败。
可行解决方案
修改EDMX的TT模板文件
找到EDMX对应的.tt模板(如Model.Context.tt),搜索包含FORCE ORDER的代码段,直接移除OPTION (FORCE ORDER)部分。例如原代码:string query = @"SELECT ... OPTION (FORCE ORDER)";修改后去掉查询提示,保存模板后重新生成模型。
自定义查询提供器移除提示
针对EF6及以上版本,在DbContext构造函数中替换查询提供器,自动移除查询中的提示:public YourDbContext() : base("YourConnString") { var objectContext = ((IObjectContextAdapter)this).ObjectContext; objectContext.QueryProvider = new NoHintQueryProvider(objectContext.QueryProvider); } public class NoHintQueryProvider : ObjectQueryProvider { public NoHintQueryProvider(ObjectQueryProvider provider) : base(provider) { } public override IQueryable CreateQuery(Expression expression) { if (base.CreateQuery(expression) is ObjectQuery query && query.CommandText.Contains("OPTION")) { query.CommandText = query.CommandText.Substring(0, query.CommandText.IndexOf("OPTION")); return query; } return base.CreateQuery(expression); } }检查版本兼容性
确认SQL Server版本与EF版本匹配,部分旧版SQL Server(如2008 R2早期版本)对这类查询提示支持有限,可尝试升级SQL Server或降级EF版本至兼容版本。手动维护EDMX模型
若上述方法无效,可绕过自动更新工具:- 在SSMS中导出数据库结构脚本。
- 手动在EDMX设计器中添加/修改实体、关联关系。
- 调整模型与数据库的映射配置,确保结构一致。
内容的提问来源于stack exchange,提问作者CiarenT
相关产品推荐
相关产品推荐

