无法在 Blazor 应用程序中使用“dotnet ef 数据库更新”

问题描述 投票:0回答:1

我添加了一个具有授权的.NET Core Blazor项目。该项目添加了用于迁移、注册和登录组件等的脚手架文件...

我尝试通过运行将表添加到 SQL Server

dotnet ef database update

但我收到此错误:

无法创建类型为“”的“DbContext”。尝试激活“MyProject.Data.ApplicationDbContext”时出现异常“无法解析类型“Microsoft.EntityFrameworkCore.DbContextOptions`1[MyProject.Data.ApplicationDbContext]”的服务。”尝试创建实例时抛出。

这是我的

ApplicationDbContext

public class ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : IdentityDbContext<ApplicationUser>(options)
{
}

这是 Program.cs 实现

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));

我在谷歌或这里找不到相关结果。我是否遗漏了什么以及如何修复它?


编辑:我认为脚手架文件存在问题,因此无法运行迁移,所以我创建了一个新的 blazor 项目,这次,我是苹果来运行它。所以迁移错误是由于我添加了一个更改,但在排除故障时错过了它。

为了更好地理解,我有多个项目,并且创建了一个类库项目 -ClassLibrary1- 来保存这些项目之间的共享功能。

但是当我尝试在 blazor 应用程序中使用

ClassLibrary1.Data.ApplicationDbContext
-BlazorApp1- 时,我收到错误。

因为有多个文件,所以我创建了解决方案的简化版本。请参考存储库

builder.Services.AddSingleton<SegmentService>();
添加到我的
Program.cs

后,就会出现错误

我想使用

ClassLibrary1
中存在的
ApplicationDbContextApplicationUser

c# entity-framework asp.net-core blazor asp.net-core-identity
1个回答
0
投票

SegmentService
中我们注入
private readonly ApplicationDbContext _dbContext;
,这样我们使用
builder.Services.AddSingleton<SegmentService>();
应该是正确的。我检查了你的项目并重现了你的错误。

那是因为您还有许多其他服务,例如

builder.Services.AddScoped<IdentityUserAccessor>();
,它基于您在 blazor 项目中定义的
ApplicationDbContext
,而不是您在类库中定义的服务。如果我在类库中使用 ApplicationDbContext,我会收到如下错误:

所以我的想法是我们可以继续使用您在blazor项目中定义的

ApplicationDbContext
,然后将
ISegmentService
更改为使用
Task<IEnumerable<Segment>> GetSegmentsAsync(int? id, ApplicationDbContext dbcontext);
,然后我们可以在调用类库中定义的方法时将ApplicationDbContext设置为参数.

© www.soinside.com 2019 - 2024. All rights reserved.