【问题标题】:How to configure Mutlilayer C# .Net Core Project for use of Entity Framework Core? [duplicate]如何配置多层 C# .Net Core 项目以使用 Entity Framework Core? [复制]
【发布时间】: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


【解决方案1】:
public class TemperBapesContext : DbContext
{
    // Your DbSets 

    // This constructor is needed
    public TemperBapesContext(DbContextOptions<TemperBapesContext> options)
        : base(options)
    {
    }
}

你需要添加一个可以注入DbContextOptions的构造函数

【讨论】:

  • 天哪,我现在感到很尴尬。我到处寻找解决方案,但在那里。非常感谢!已经从事过此类项目,但我又忘记了很多事情。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 2023-04-09
  • 2020-01-27
  • 2017-03-23
  • 2019-06-18
  • 2021-01-07
  • 1970-01-01
  • 2019-05-12
相关资源
最近更新 更多