.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"
}
}
}
}
我对 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"
}
}
}
}