我有一个 Asp.Net 项目,我尝试使用 DbContext 迁移数据库。不幸的是,我收到错误
无法创建类型为“”的“DbContext”。尝试激活“Bulky.DataAccess.Data.ApplicationDbContext”时出现异常“无法解析类型“Microsoft.EntityFrameworkCore.DbContextOptions`1[Bulky.DataAccess.Data.ApplicationDbContext]”的服务。尝试创建实例时抛出。
当我尝试使用以下命令迁移数据库时
dotnet ef 迁移添加 AddCategoryToDbAndSeedTable
命令
你能向我解释一下为什么它不起作用吗?我用谷歌驱动器链接附加了整个项目
项目链接:https://drive.google.com/file/d/1hEIv9BeocKmFZRyELYeUZTTtyrIaZbF9/view ?usp=sharing
编辑:这是详细日志: https://drive.google.com/file/d/1jPweHJc0YsI-Kg_5W6D5cfFQd3n6X8XU/view ?usp=sharing
这是相关代码:
程序.cs:
using Bulky.DataAccess.Data;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
ApplicationDbContext.cs:
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().HasData(
new Category { Id = 1, Name = "Action", DisplayOrder = 1 },
new Category { Id = 2, Name = "SciFi", DisplayOrder = 2 },
new Category { Id = 3, Name = "History", DisplayOrder = 3 }
);
}
您需要指定
--project
(应添加新 EF 迁移的项目)和--startup-project
(包含数据库设置的项目)来运行迁移。如果没有这些设置,Bulky.DataAccess
项目就没有数据库连接字符串,并且ApplicationDbContext
如果没有项目的依赖项注入设置,则无法构建项目BulkyWeb3
。从与 BuklyWeb3.sln 相同的文件夹中,您可以运行以下命令:
dotnet ef migrations add AddInitialMigration --startup-project BulkyWeb3 --project Bulky.DataAccess
或者,从 Bulky.DataAccess.csproj 所在的同一文件夹中,您可以运行以下命令:
dotnet ef migrations add AddInitialMigration --startup-project ..\BulkyWeb3
这些命令将在新文件夹中创建新的 EF 迁移
/BulkyWeb3/Bulky.DataAccess/Migrations
。您需要的是一个在使用 cli 工具时
IDesignTimeDbContextFactory<ApplicationDbContext>
为您提供连接字符串的工具。ApplicationDbContext
dotnet ef
连接字符串可以只指向 localdb,因为
dotnet ef migrations add
不连接到数据库,它只需要能够实例化您的DbContext
.