【问题标题】:AddDbContext not working in ConfigureServices of ASP.NET Razor 2.2AddDbContext 在 ASP.NET Razor 2.2 的 ConfigureServices 中不起作用
【发布时间】:2019-04-18 09:25:58
【问题描述】:

我将一个 sql server 数据库反转为它们各自的类和上下文,这一切似乎都运行良好。

在最小上下文类中,有一行代码指向连接字符串,如果保留它可以正常工作,但连接字符串完全嵌入到上下文文件中。

我尝试在上下文中注释它并通过ConfigureServices 部分添加(这样我可以在appsettings.json 中使用conn 字符串)使用

services.AddDbContext<myDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("dbconn")));

但是当我运行时,我得到一个错误:-

System.InvalidOperationException: '没有数据库提供程序 为此 DbContext 配置。可以通过以下方式配置提供程序 覆盖 DbContext.OnConfiguring 方法或使用 AddDbContext 在应用服务提供商上。如果使用 AddDbContext,则 还要确保您的 DbContext 类型接受 DbContextOptions&lt;TContext&gt; 对象在其构造函数中并将其传递给 DbContext 的基本构造函数。'

我在 Google 上尝试了很多东西,但总是以同样的错误告终,除非我取消注释上下文类文件中的硬编码连接字符串。

知道我做错了什么吗?

我已经尝试了很多 Google 回复,但都有相同的错误 - :-

System.InvalidOperationException: '没有数据库提供程序 为此 DbContext 配置。可以通过以下方式配置提供程序 覆盖 DbContext.OnConfiguring 方法或使用 AddDbContext 在应用服务提供商上。如果使用 AddDbContext,则 还要确保您的 DbContext 类型接受 DbContextOptions&lt;TContext&gt; 对象在其构造函数中并将其传递给 DbContext 的基本构造函数。'

我从上下文类中将其注释掉:-

optionsBuilder.UseSqlServer("Server=MYSERVER\\MSSQL2017EXPRESS;Database=DBNAME;Trusted_Connection=True;user id=DBUSER;password=DBPASSWORD;");

这就是 startup.cs 中的内容,但不起作用:-

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    //My DB conn
    services.AddDbContext<myDatabaseContext>(options => options.UseSqlServer(Configuration.GetConnectionString("dbconn")));

}

我需要能够提供来自 appsettings.json 的连接字符串,而不是将其硬编码到上下文类文件中。

【问题讨论】:

  • 在建立连接之前如何从数据库中检索选项?您需要建立连接的选项。选项必须在 c# 项目中,而不是数据库中。
  • 如果使用了 AddDbContext,那么还确保您的 DbContext 类型在其构造函数中接受 DbContextOptions&lt;TContext&gt; 对象并将其传递给 DbContext 的基本构造函数。'

标签: c# asp.net-mvc entity-framework razor


【解决方案1】:

您很可能在上下文中缺少构造函数。

public myDatabaseContext(DbContextOptions<myDatabaseContext> options) : base(options) {
    //...
}

按照错误消息中的建议

如果使用AddDbContext,则 还要确保您的 DbContext 类型接受 DbContextOptions&lt;TContext&gt; 对象在其构造函数中并将其传递给 DbContext 的基本构造函数。'

【讨论】:

    【解决方案2】:

    您很可能缺少包 Microsoft.EntityFrameworkCore.SqlServer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-21
      • 2019-09-17
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2021-08-19
      • 2019-08-15
      相关资源
      最近更新 更多