【发布时间】:2021-03-10 10:47:23
【问题描述】:
情况
我正在做一个学校项目,我使用 Blazor(服务器端)作为前端。我确实有一个业务层和一个 DataAcces 层(都是 .Net Core 类库)。我正在使用 Code First 创建 SQLite 数据库。
问题/错误
我在尝试执行 Add-Migration InitialCreate 时不知何故收到以下消息:
警告
访问 Microsoft.Extensions.Hosting 时出错 服务。在没有应用程序服务提供商的情况下继续。错误: 'AddDbContext' 是通过配置调用的,但上下文类型 'TemperBapesContext' 只声明了一个无参数的构造函数。这 意味着传递给“AddDbContext”的配置永远不会 用过的。如果将配置传递给“AddDbContext”,则 'TemperBapesContext' 应该声明一个接受 DbContextOptions 并且必须将其传递给基础 DbContext 的构造函数。
错误
没有为此 DbContext 配置数据库提供程序。一种 可以通过覆盖“DbContext.OnConfiguring”来配置提供程序 方法或通过在应用程序服务提供者上使用“AddDbContext”。 如果使用了“AddDbContext”,那么还要确保您的 DbContext 类型 在其构造函数中接受一个 DbContextOptions 对象,并且 将其传递给 DbContext 的基本构造函数。
项目架构和描述
Startup 项目是我的 Blazor 应用程序。
我的 appsettings.json 包含数据库的 ConnectionString:
"ConnectionStrings": {
"SQLite": "Data Source=L:\\M183\\m183\\project\\SQLite\\TemperBapesDB.db;"
}
我的 Startup.cs ConfigureServices() 看起来像这样:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddBussinesLayer(Configuration);
}
Business Level 上的 SetupExtensions.cs 如下所示:
public static void AddBussinesLayer(this IServiceCollection services, IConfiguration configuration)
{
services.AddDataAccess(configuration);
}
DataAccess 级别的 SetupExtensions.cs 如下所示:
public static void AddDataAccess(this IServiceCollection services, IConfiguration configuration)
{
services.AddDbContext<TemperBapesContext>(options => options.UseSqlite(configuration.GetConnectionString("SQLite")));
}
已安装 NuGet 包
Blazor 项目:
- Microsoft.EntityFrameworkCore.Design
业务层:
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.DependencyInjection.Abstractions
数据访问层:
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Sqlite
- Microsoft.EntityFrameworkCore.Tools
【问题讨论】:
-
@devNull 不完全是,但 Cem.S 在下面回答了我的问题。
-
不知道怎么回答它,因为它是相同的错误和相同的答案
-
哦,我实际上查看了帖子,因为您的链接指向问题而不是答案。您可以直接获得答案的链接。但也谢谢你!
标签: c# sqlite .net-core entity-framework-core