更新存储过程后EDMX未生成对应复杂类型,求解决方案
解决EDMX更新存储过程后无法生成对应复杂类型的方案
以下是几个经过验证的可行解决步骤:
手动创建复杂类型并关联函数导入
- 在EDMX的「复杂类型」节点右键选择「新建复杂类型」,根据存储过程返回的结果集,手动添加匹配的字段(字段名、数据类型必须和存储过程返回的完全一致)。
- 找到「函数导入」中对应的存储过程,右键选择「编辑」,在「返回类型」下拉框中选择刚创建的复杂类型,保存EDMX文件即可。
确保存储过程返回结构唯一且明确
EF无法识别返回结构不固定的存储过程,需检查:- 避免使用动态SQL拼接返回结果;
- 若存储过程有条件分支,所有分支必须返回列数、列名、数据类型完全一致的结果集,哪怕分支逻辑返回空数据,也要保持结构统一。
清理EDMX文件的冗余XML节点
有时旧的残留配置会干扰新结构生成:- 关闭Visual Studio,用记事本或其他文本编辑器打开.edmx文件;
- 搜索存储过程的名称,删除所有与之相关的残留节点(包括
<Function>、<FunctionImport>、<ComplexType>下的旧内容); - 保存.edmx文件后重新打开VS,再次执行「从数据库更新模型」添加存储过程。
利用「获取列信息」功能自动生成
打开函数导入的编辑窗口,点击窗口下方的「获取列信息」按钮,如果EF能识别到存储过程的返回列,会自动填充字段列表,此时直接点击「生成复杂类型」即可创建对应的_Result后缀复杂类型。检查EF版本与项目兼容性
若使用的是Entity Framework 6,确保安装了对应.NET Framework版本的最新EF6补丁;避免项目目标框架与EF版本不匹配的情况(比如用.NET Framework 4.0搭配过新的EF6版本)。
内容的提问来源于stack exchange,提问作者Obraine
相关产品推荐
相关产品推荐

