Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Json连接字符串-IConfiguration.net核心_C#_Sql Server_Asp.net Core_Configuration_Environment Variables - Fatal编程技术网

C# Json连接字符串-IConfiguration.net核心

C# Json连接字符串-IConfiguration.net核心,c#,sql-server,asp.net-core,configuration,environment-variables,C#,Sql Server,Asp.net Core,Configuration,Environment Variables,我正在尝试访问存储在应用程序中的连接。我的解决方案有两个项目,一方面是数据库项目(DAL),另一方面是WEB API 在web api上,我有一个App.settings,其中包含两个环境的连接字符串 我正在尝试配置DBContext以从那里获取连接字符串 我做错了什么 DAL项目: DBContext: using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata;

我正在尝试访问存储在应用程序中的连接。我的解决方案有两个项目,一方面是数据库项目(DAL),另一方面是WEB API

在web api上,我有一个App.settings,其中包含两个环境的连接字符串

我正在尝试配置DBContext以从那里获取连接字符串

我做错了什么

DAL项目:

DBContext:

using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using DAL.Models.ProcedureModels;
using DAL;
using Microsoft.Extensions.Configuration;

..........

       public DBContext()
        {
        }

        public DBContext(DbContextOptions<DBContext> options)
            : base(options)
        {
        }

.........
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                IConfiguration configuration;
                optionsBuilder.UseSqlServer(configuration.GetConnectionString("local"));
            }
        }

这声明了一个未初始化的变量
配置
,因此不包含任何值,然后立即尝试使用它。这是行不通的。您必须首先初始化
配置
变量

但这并不能真正帮助您,因为您需要从这里的web应用程序获取配置

与其使用
onconfigurang
,我建议您只使用带有
DbContextOptions
的构造函数,然后依靠应用程序从库中正确注册数据库上下文

因此,在web应用程序启动的
配置服务
中,添加以下内容:

services.AddDbContext<DBContext>(options =>
{
    options.UseSqlServer(configuration.GetConnectionString("local"));
});
services.AddDbContext(选项=>
{
options.UseSqlServer(configuration.GetConnectionString(“本地”);
});

在那里,
DBContext
将是您的
DAL
项目中的类型。

如果您坚持在
DBContext
中访问connectionstring,您可以尝试从服务集合中解析
IConfiguration

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    private readonly IConfiguration _configuration;
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
        IConfiguration configuration)
        : base(options)
    {
        _configuration = configuration;
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            var connectionString = _configuration.GetConnectionString("local");
            optionsBuilder.UseSqlServer(_configuration.GetConnectionString("local"));
        }
    }
}
public类ApplicationDbContext:IdentityDbContext
{
专用只读IConfiguration\u配置;
公共应用程序DBContext(DbContextOptions选项,
i配置(配置)
:基本(选项)
{
_配置=配置;
}
配置时受保护的覆盖无效(DBContextOptions Builder Options Builder)
{
如果(!optionBuilder.IsConfigured)
{
var connectionString=_configuration.GetConnectionString(“本地”);
optionsBuilder.UseSqlServer(_configuration.GetConnectionString(“local”));
}
}
}
services.AddDbContext<DBContext>(options =>
{
    options.UseSqlServer(configuration.GetConnectionString("local"));
});
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    private readonly IConfiguration _configuration;
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options,
        IConfiguration configuration)
        : base(options)
    {
        _configuration = configuration;
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            var connectionString = _configuration.GetConnectionString("local");
            optionsBuilder.UseSqlServer(_configuration.GetConnectionString("local"));
        }
    }
}