Visual Studio 2019创建ADO.NET实体数据模型提示未将对象引用设置到对象实例问题
可行排查解决方法
方案1:临时修改项目类型标识绕开识别异常
该问题核心是VS 2019 16.11.x版本的EF工具对Webjob项目的类型识别存在bug,可通过临时修改项目配置解决:
- 右键Webjob项目,选择【卸载项目】,再次右键选择【编辑项目文件】
- 找到
<ProjectTypeGuids>节点,删除其中Web类型和Webjob专属的GUID(通常为{349c5851-65df-11da-9384-00065b846f21}和Webjob对应GUID),保存文件 - 右键项目选择【重新加载项目】,此时项目会被识别为普通类库/控制台项目,再执行ADO.NET实体数据模型添加流程
- 生成EDMX并确认字段、智能提示正常后,重复上述步骤把之前删除的GUID加回
<ProjectTypeGuids>节点即可
方案2:跨项目迁移已生成的EDMX文件
直接绕开Webjob项目下的工具生成限制:
- 新建普通控制台项目,正常生成包含所有表结构的EDMX文件、上下文类、实体类
- 将生成的所有.edmx、.tt、实体类文件全部复制到Webjob项目的对应目录下
- 复制控制台项目App.config中的连接字符串、
<entityFramework>完整配置节点,替换Webjob项目App.config中的对应部分 - 重新生成Webjob项目,即可正常使用数据上下文和表字段智能提示
方案3:调整VS运行配置修复工具异常
- 打开VS顶部菜单栏【工具】-【选项】-【项目和解决方案】-【Web项目】,取消勾选【对Web项目使用64位版本的IIS Express】,保存设置
- 进入【工具】-【选项】-【NuGet包管理器】-【常规】,点击【清除所有NuGet缓存】
- 卸载Webjob项目中已安装的EntityFramework NuGet包,重新安装对应版本的EF6包,重启VS后再尝试生成EDMX
方案4:改用Code First反向工程替代EDMX
如果EDMX生成问题始终无法解决,可以使用EF6自带的Code First反向生成功能,完全不需要创建EDMX文件即可获得完整的实体类和上下文:
- 在Webjob项目中安装对应版本的EntityFramework NuGet包
- 打开【工具】-【NuGet包管理器】-【包管理器控制台】
- 执行命令:
Scaffold-DbContext "你的数据库连接字符串" System.Data.Entity.SqlServer -OutputDir Models - 命令执行完成后会在Models目录下生成完整的上下文类和所有表对应的实体类,功能和EDMX生成的完全一致,智能提示正常
内容的提问来源于stack exchange,提问作者Joe Ruder
相关产品推荐
相关产品推荐

