ASP.NET WebAPI中Entity Framework scaffold与migration命令运行异常如何解决
问题1:scaffold命令找不到命名连接字符串报错解决
- 命令中的连接字符串名称写法错误,你当前写的
Name=ConnectionStrings:Cloud需要改为Name=Cloud即可,GetConnectionString方法会自动读取配置中ConnectionStrings节点下对应的键值,不需要额外加ConnectionStrings:前缀。 - 执行scaffold命令时如果你的命令行工作目录不是WebAPI启动项目目录,需要添加
--startup-project参数指向你的WebAPI项目路径,确保EF工具能读取到启动项目里的appsettings.json/用户密钥配置,示例命令:
dotnet ef dbcontext scaffold Name=Cloud Microsoft.EntityFrameworkCore.SqlServer --startup-project ./你的WebAPI项目路径
问题2:添加迁移时报AdminContext未配置数据库Provider解决
报错原因是EF设计时工具创建上下文实例时,会优先调用AdminContext提供的无参构造函数,你的无参构造没有配置任何数据库Provider,导致初始化失败,有两种解决方式任选:
方式1:删除AdminContext的无参构造函数
删掉public AdminContext() { }这一行即可,EF工具会自动通过依赖注入链路读取你在Startup中配置的DbContextOptions完成上下文初始化,不会影响应用正常运行逻辑。
方式2:给无参构造补充设计时配置(适合需要保留无参构造的场景)
在AdminContext中重写OnConfiguring方法,仅在设计时场景下加载配置,避免覆盖运行时的注入配置,示例代码:
public class AdminContext : DbContext { public AdminContext() { } public AdminContext(DbContextOptions<AdminContext> options) : base(options) { } public DbSet<User> Users { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { IConfigurationRoot config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); optionsBuilder.UseSqlServer(config.GetConnectionString("Admin")); } } }
执行迁移命令时同样建议加上--startup-project参数指向WebAPI启动项目,示例:
dotnet ef migrations add test -c AdminContext --startup-project ./你的WebAPI项目路径
内容的提问来源于stack exchange,提问作者patileiti
相关产品推荐
相关产品推荐

