更新EDMX实体模型时如何使用旧版本Entity Framework 4.1.10331.0
EF 4.1 版本下保留EDMX更新/新建能力的解决方案
前置检查
- 先清理项目中的EF版本冲突:卸载所有高于4.1.10331.0的EF Nuget包,确保
packages.config中只有对应版本的EF引用,格式如下:
<package id="EntityFramework" version="4.1.10331.0" targetFramework="你的项目目标框架版本" />
- 清理配置文件冗余:删除
web.config/app.config中所有EF5/EF6专属的配置,包括<entityFramework>节点、指向高版本EF的程序集绑定重定向规则,仅保留EF4.1所需的基础配置。
操作步骤
使用旧版实体数据模型模板
不要直接选择默认的「ADO.NET实体数据模型」模板,该模板默认调用高版本EF的适配向导,会强制要求选择EF5/EF6版本。改为右键项目选择 添加->新建项,搜索并选择 ADO.NET 实体数据模型(旧版) 模板,后续的生成/更新流程会自动匹配项目当前引用的EF4.1版本,不会弹出版本选择提示。修复找不到旧版模板的问题
如果你的VS版本高于2012,默认没有集成EF4.1的工具组件,需要手动安装「EF 4.x Tools for Visual Studio」对应版本的组件,安装完成后重启VS即可看到旧版模板。强制修正EDMX版本(更新现有模型时适用)
如果操作现有EDMX仍弹出版本提示,按以下步骤处理:
- 关闭VS,删除项目目录下的
.edmx.diagram、自动生成的.tt模板文件,仅保留原始EDMX核心文件 - 重新打开项目,右键EDMX文件选择「打开方式->XML(文本)编辑器」,确认根节点的
Version属性值为2.0(EF4.1对应EDMX版本为2.0,EF5对应3.0、EF6对应3.1),版本号不符则手动修改后保存 - 右键EDMX选择「更新模型从数据库」即可正常触发EF4.1的更新流程
注意事项
- 每次更新完模型后,校验自动生成的实体类的属性类型、命名空间是否和原有业务逻辑匹配,避免出现意外改动
- 不要在已安装高版本EF工具扩展的VS中直接通过设计器修改EDMX,防止EDMX版本被自动升级
内容的提问来源于stack exchange,提问作者Gulfam
相关产品推荐
相关产品推荐

