使用EF Core Code First在现有数据库中无法创建新表是什么原因?
排查步骤
检查迁移文件有效性
执行Add-Migration后打开项目Migrations目录下新生成的迁移类,确认Up方法中存在创建RegisterAccount表的逻辑:- 若
Up方法为空,说明EF未识别到模型变更,常见原因:DbSet定义未包含在你使用的DbContext中、执行迁移命令时指定的DbContext和你写DbSet的上下文不一致、模型类未参与项目编译。
- 若
核对数据库连接字符串
确认DbContext加载的连接字符串指向的数据库实例、库名,和你SSMS中打开的完全一致。常见异常场景:连接字符串配置为LocalDB但SSMS连接的是独立SQL Server实例、开发环境配置文件被覆盖导致连接到了测试库。检查迁移命令执行结果
执行Update-Database时查看PMC输出日志:- 若有报错,优先解决报错问题,最常见的报错是
RegisterAccount模型未定义主键:EF默认要求实体有主键,你当前的模型缺少主键定义,可以补充主键属性:
也可以用public class RegisterAccount { // 新增主键 public int Id { get; set; } public string Username { get; set; } public string Password { get; set; } public string ConfirmPassword { get; set; } }[Key]特性指定已有字段作为主键。 - 若无报错提示已应用所有迁移,可执行
Script-Migration生成完整SQL脚本,直接在SSMS对应库中执行,排查是否是权限不足、表名重复的问题。
- 若有报错,优先解决报错问题,最常见的报错是
多上下文场景参数校验
如果项目存在多个DbContext,Add-Migration和Update-Database命令都需要补充-Context参数指定目标上下文,否则迁移会默认应用到第一个扫描到的上下文对应的库中。
内容的提问来源于stack exchange,提问作者jacky
相关产品推荐
相关产品推荐

