【问题标题】:ConnectionString not initialized .net coreConnectionString 未初始化 .net 核心
【发布时间】:2019-12-10 10:26:25
【问题描述】:

我复制了一种使用 .net Framework 访问数据库的方法,但它在 .net Core 中不起作用。我找到了一种修复它的方法并按照所说的进行操作,但我得到了 connectionString 未初始化的错误。因此,我不知道如何让它工作。

我正在使用的代码:

public class DataAccess
{
    private string _connectionString;

    public DataAccess(string connectionString)
    {
        _connectionString = connectionString;
    }

    public List<PropertyModel> LoadData()
    {
        var data = new List<PropertyModel>();

        using(IDbConnection cnn = new SqlConnection(_connectionString))
        {
            data = cnn.Query<PropertyModel>(@"select *
                        from dbo.PropertyModel;").ToList();
        }
        return data;
    }
}

在控制器中:

private DataAccess data;

    public PropertyController(IOptions<ConnectionConfig> connectionConfig)
    {
        var connection = connectionConfig.Value;
        string connectionString = connection.Analysis;
        data = new DataAccess(connectionString);
    }

    public IActionResult Index()
    {
        var test = data.LoadData();
        return View();
    }

在启动中:

 services.Configure<ConnectionConfig
(Configuration.GetSection("MVCCoreAppDB"));

我创建了一个 POCO 类:

public class ConnectionConfig
{
    public string Analysis { get; set; }
}

我关注了this

appsettings.json:

"ConnectionStrings": {
"MVCCoreAppDB": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=MVCCoreAppDB;Integrated Security=True;Connect Timeout=60;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"},

【问题讨论】:

    标签: c# asp.net-core-mvc connection-string dapper


    【解决方案1】:

    您从配置中调用了错误的部分。

    services.Configure<ConnectionConfig>(Configuration.GetSection("ConnectionStrings"));
    

    您还需要更新模型

    public class ConnectionConfig {
        public string MVCCoreAppDB { get; set; }
    }
    

    也就是说,我建议您更改设计以预先填充模型并将其注册到服务集合以进行注入

    在启动中:

    services.AddScoped<DataAccess>(_ => 
        new DataAccess(Configuration.GetConnectionString("MVCCoreAppDB"))
    );
    

    并将数据访问显式注入控制器

    private readonly DataAccess data;
    
    public PropertyController(DataAccess data) {
        this.data = data;
    }
    
    public IActionResult Index() {
        var test = data.LoadData();
        return View();
    }
    

    参考Explicit Dependencies Principle

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多