执行Scaffold-DbContext报Method 'Create'无实现异常如何解决
环境与问题复现
- 运行环境:Windows 10(版本10.0.19044,内部版本19044)
- 目标项目:.NET Standard 2.0
- 已安装EF相关NuGet包:

- 执行的脚手架命令:
Scaffold-DbContext "Data Source=.\MSSQLSERVER2012;Initial Catalog=MbsAnalysisData;User Id=eflogin; Password=eflogin2" Microsoft.EntityFrameworkCore.SqlServer -output ModelsEF
- 异常现象:控制台提示
Build started... Build succeeded.后抛出System.TypeLoadException,具体内容为Method 'Create' in type 'Microsoft.EntityFrameworkCore.SqlServer.Scaffolding.Internal.SqlServerDatabaseModelFactory' from assembly 'Microsoft.EntityFrameworkCore.SqlServer, Version=2.2.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' does not have an implementation. - 补充背景:当前安装的
Microsoft.EntityFrameworkCore.SqlServer 2.2.2在同解决方案下的MVC 5.0项目中可正常运行,怀疑问题与.NET Standard 2.0实例化限制有关。
根因说明
该异常与.NET Standard 2.0的框架能力限制无关,核心原因是EF Core相关程序集版本不匹配:
EF Core的设计时组件(脚手架、工具包)和数据库提供程序包强依赖同版本的核心库,当前项目中必然存在EF Core相关包版本混装的情况——要么是Microsoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Design/Microsoft.EntityFrameworkCore.Tools版本和SqlServer提供程序的2.2.2版本不一致,要么是包管理器控制台加载了其他项目(比如可正常运行的MVC 5.0项目)的不同版本EF Core程序集。
2.2.2版本的SqlServer提供程序中SqlServerDatabaseModelFactory类实现的Create方法,是对应2.2版本核心库定义的接口签名,一旦加载到其他版本的核心库,接口签名不匹配就会抛出该类型加载异常。
排查步骤
- 检查包管理器控制台顶部的「默认项目」下拉选项,确保选中的是要生成模型的.NET Standard 2.0项目,而非解决方案中其他引用EF Core的项目。
- 展开项目的依赖项-包节点,核对所有前缀为
Microsoft.EntityFrameworkCore的包版本,确认是否存在2.x与3.x/5.x混装的情况。 - 清除本地包缓存和编译残留:关闭Visual Studio后,删除项目根目录下的
bin、obj文件夹,打开VS后执行Update-Package -reinstall重新还原所有包,排除旧版本DLL残留导致的加载错误。
解决方案
方案1:保留2.2.2版本(不推荐,2.2已停止支持)
如果暂时不想升级版本,将所有EF Core相关包统一固定为2.2.2版本即可:
- 卸载项目中所有已安装的
Microsoft.EntityFrameworkCore开头的NuGet包 - 在包管理器控制台执行以下命令安装固定版本包:
Install-Package Microsoft.EntityFrameworkCore -Version 2.2.2 Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.2 Install-Package Microsoft.EntityFrameworkCore.Design -Version 2.2.2 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 2.2.2
- 重新生成解决方案后,再执行脚手架命令。
方案2:升级到3.1 LTS版本(推荐)
EF Core 3.1是长期支持版本,完全兼容.NET Standard 2.0,不存在跨版本兼容问题:
- 卸载项目中所有旧版EF Core相关包
- 执行以下命令安装3.1系列最新补丁版本:
Install-Package Microsoft.EntityFrameworkCore -Version 3.1.32 Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.32 Install-Package Microsoft.EntityFrameworkCore.Design -Version 3.1.32 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 3.1.32
- 重新生成解决方案后执行脚手架命令即可,3.1版本的脚手架逻辑与2.2基本一致,仅部分高级参数有调整,不影响常规表模型生成。
内容的提问来源于stack exchange,提问作者iqworks
相关产品推荐
相关产品推荐

