.NET Core Web API 项目和 Entity Framework 6 空异常

.NET Core Web API project and Entity Framework 6 null exception

我对 EF 和 .NET Core 都很陌生,但是使用一个工作项目我能够构建一个 Core 2.0 Web API 解决方案。唯一的问题是我无法在启动时实例化 Entity Framework。我收到一条错误消息:

System.ArgumentNullException: 值不能为空。 参数名称:connectionString

我的 Startup.cs 文件:

 public class Startup
{
    public Startup(IConfiguration configuration)
    {

        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("dbc")));
        services.AddMvc();
    } 

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();
    }
}

我验证的 JSON 文件:

  {
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "ConnectionStrings": {
      "dbc": "Server=cc;Initial Catalog=dd;Trusted_Connection=True;MultipleActiveResultSets=true"
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

更新 我的 Program.Cs

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

   public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
}

ConnectionString 必须存储在文件名 appsettings.json 中。请尝试将连接字符串部分移动到 appsettings.json 文件中并尝试。 例如: appsettings.json 文件

"Data": {
  "dbc": {
      "ConnectionString": "Server=cc;Initial Catalog=dd;Trusted_Connection=True;MultipleActiveResultSets=true"
    },
}

Startup.cs 文件

services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration["Data:dbc:ConnectionString"]));

尝试将启动函数更改为

public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

实例化您的配置并使用 appsettings.json 文件。

奇怪的是,将 ConnectionStrings 移动到 apsettings.json 文件的顶部就达到了目的。谢谢大家的帮助。

 {
      "ConnectionStrings": {
        "dbc": "Server=cc;Initial Catalog=dd;Trusted_Connection=True;MultipleActiveResultSets=true"
      },
      "Logging": {
        "IncludeScopes": false,
        "Debug": {
          "LogLevel": {
            "Default": "Warning"
          }
        },
        "Console": {
          "LogLevel": {
            "Default": "Warning"
          }
        }
      }
    }