ASP.NET Core 6 Blazor迁移数据库无法创建ApplicationDbContext求助
无法创建类型为'ApplicationDbContext'的对象。若要了解设计时支持的不同模式,请访问 https://go.microsoft.com/fwlink/?linkid=851728
问题原因
EF Core 设计时迁移工具无法在ASP.NET Core 6顶级语句模式的Program.cs中正确获取ApplicationDbContext的构造配置,同时你的代码存在部分逻辑顺序错误。
解决步骤
- 执行迁移命令时指定启动项目为Blazor Web托管的Server端项目
如果你使用包管理器控制台(PMC),先将默认项目切换到Server项目,执行命令:
Add-Migration InitialCreate -StartupProject ProyectoBP.Server Update-Database -StartupProject ProyectoBP.Server如果你使用dotnet CLI,在解决方案根目录执行命令:
dotnet ef migrations add InitialCreate --startup-project ./ProyectoBP.Server --project ./ProyectoBP.Server dotnet ef database update --startup-project ./ProyectoBP.Server --project ./ProyectoBP.Server- 执行迁移命令时指定启动项目为Blazor Web托管的Server端项目
- 修正SeedData.cs的逻辑顺序错误
你当前代码在判断context是否为null前就调用了SaveChanges,调整后代码如下:
using Microsoft.EntityFrameworkCore; using ProyectoBP.Server.Data; namespace ProyectoBP.Shared.Models { public static class SeedData { public static void Initialize(IServiceProvider serviceProvider) { var context = serviceProvider.GetRequiredService<ApplicationDbContext>(); if (context == null || context.Movies == null) { throw new ArgumentNullException("Null ApplicationDbContext"); } // 先判断是否已有种子数据 if (context.Movies.Any()) { return; // DB已存在种子数据 } // 此处可添加你的Movie种子数据 // context.Movies.AddRange(new Movie{...}); context.SaveChanges(); } } }- 修正SeedData.cs的逻辑顺序错误
- (可选,上述步骤无效时使用)添加DbContext设计时工厂
在Server项目的Data文件夹下新建ApplicationDbContextFactory.cs文件,代码如下:
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.Configuration; using System.IO; namespace ProyectoBP.Server.Data { public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext> { public ApplicationDbContext CreateDbContext(string[] args) { IConfigurationRoot configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); optionsBuilder.UseSqlServer(configuration.GetConnectionString("Prueba")); return new ApplicationDbContext(optionsBuilder.Options); } } }- (可选,上述步骤无效时使用)添加DbContext设计时工厂
- 检查Nuget包安装情况
确认Server项目已安装版本匹配的以下包:
Microsoft.EntityFrameworkCore.Tools(6.x版本)Microsoft.EntityFrameworkCore.SqlServer(6.x版本)Microsoft.AspNetCore.Identity.EntityFrameworkCore(6.x版本)
- 检查Nuget包安装情况
内容的提问来源于stack exchange,提问作者Ismael
相关产品推荐
相关产品推荐

