使用Database First执行Scaffold-DbContext时提示“Unable to find a table”错误求助
解决EF Core Scaffold-DbContext 报“Unable to find a table”错误的方案
我来帮你排查这个问题,结合你给出的环境(VS2017 v15.6.2 + SQL Server 2008 v10.50.4)和操作步骤,大概率是以下几个原因导致的,咱们一步步来解决:
1. EF Core版本与SQL Server 2008不兼容
这是最可能的原因——EF Core 2.0及以上版本对SQL Server的最低要求是SQL Server 2012,而你用的是SQL Server 2008 R2,版本不匹配会导致EF Core无法正确识别数据库中的表结构。
解决办法:
如果你必须保留SQL Server 2008,得把EF Core降级到支持它的1.1.x版本,步骤如下:
- 打开包管理器控制台,先卸载现有的EF Core包:
Uninstall-Package Microsoft.EntityFrameworkCore.SqlServer Uninstall-Package Microsoft.EntityFrameworkCore.Tools - 安装兼容的1.1.x版本:
Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 1.1.6 Install-Package Microsoft.EntityFrameworkCore.Tools -Version 1.1.5 - 重新执行Scaffold命令(注意EF Core 1.x的命令语法更简洁):
Scaffold-DbContext "Server=ph2srv76;Database=AVDRS;Integrated Security=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
2. 当前账号没有足够的数据库权限
EF Core生成实体时需要读取SQL Server的系统视图(比如sys.tables、sys.columns),如果你的VS运行账号没有这些视图的访问权限,就会找不到表。
解决办法:
登录SQL Server Management Studio,给当前账号添加必要权限:
USE AVDRS; -- 添加数据读取权限 EXEC sp_addrolemember 'db_datareader', '你的域账号\用户名'; -- 授予查看数据库定义的权限 GRANT VIEW DEFINITION ON DATABASE::AVDRS TO '你的域账号\用户名';
3. 命令参数不完整
你提供的命令里-OutputDi明显没写完,完整参数应该是-OutputDir用来指定实体类的输出目录,参数缺失可能导致命令执行异常。
解决办法:
确保命令完整,比如指定输出到项目的Models文件夹:
Scaffold-DbContext "Server=ph2srv76;Database=AVDRS;Integrated Security=True;Trusted_Connection=True;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
4. 数据库中确实没有用户表
最后可以确认一下:登录SSMS,展开AVDRS数据库的「表」节点,看看有没有你要生成实体的用户表——如果数据库是空的,自然会报这个错误。
内容的提问来源于stack exchange,提问作者Robert Keith
相关产品推荐
相关产品推荐

