网络核心连接字符串 Dapper Visual Studio 2017

Posted

技术标签:

【中文标题】网络核心连接字符串 Dapper Visual Studio 2017【英文标题】:Net Core Connection String Dapper visual studio 2017 【发布时间】:2018-02-21 13:46:10 【问题描述】:

我正在尝试在我的 .Net Core 应用程序中设置连接字符串,但我不断收到错误消息:

System.NullReferenceException: '对象引用未设置为对象的实例。'

我已尝试将以下内容添加到 appsettings.json

"ConnectionStrings": 

"Analysis": "Server=DESKTOP-MYSERVER;Database=MYDATABASE;User Id=sa; Password=Password123;Provider=System.Data.SqlClient;Trusted_Connection=True;MultipleActiveResultSets=true;Pooling=false;"

我也尝试过使用 web.config,就像在 .Net Core 之前使用的那样:

<connectionStrings>
<add name="Analysis" providerName="System.Data.SqlClient" 
     connectionString="Server=DESKTOP-MYSERVER;Database=MYDATABASE;User Id=sm;Password=Password123;"/>

然后在 c# 中我有:

public List<DapperTest> ReadAll()
    
        var data = new List<DapperTest>();
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Analysis"].ConnectionString))
        
             data = db.Query<DapperTest>("select * from testTable").ToList();
        

        return data;
    

这两种方式都给我一个例外:

System.NullReferenceException: '对象引用未设置为对象的实例。'

我使用了以下资源:

.Net CORE Dapper Connection String?

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Get connection string from App.config

但我错过了一些东西。我只设置了一次连接字符串,它不在 .Net Core 中,因此对其他人来说可能很明显。

【问题讨论】:

哪一行出错了? NULL 是什么对象? .NET 核心的配置方式不同。你有appsettings.json 吗?推荐的方法是将 appsettings 加载到您的 IConfigurationRoot 对象中并将其注入您的类中,然后从那里获取连接字符串 @Shyju 我在 c# 代码的以下行中得到对象为空:using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["Analysis"].ConnectionString)) @Jonesopolis 我确实尝试将连接字符串添加到 appsettings.json,如我上面的代码所示。我还没有尝试通过IConfigurationRoot 加载它 @Jonesopolis 我想为此使用Options Pattern 吗? 【参考方案1】:

如果您使用的是 appsettings.json,请创建一个简单的 POCO 类来为您的连接字符串配置建模,如下所示:

public class ConnectionConfig

        public string Analysis get;set;

在 Startup.cs 的 ConfigureServices 方法中添加这一行

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

数据服务类

class YourClass
    private string _connectionString;

    YourClass(string connectionString)
       _connectionString = connectionString;
    

    //Your implementation
    public List<DapperTest> ReadAll()
    
        var data = new List<DapperTest>();
        using (IDbConnection db = new SqlConnection(_connectionString)
        
            data = db.Query<DapperTest>("select * from testTable").ToList();
        

       return data;
   

在你的控制器构造函数中注入IOptions&lt;ConnectionConfig&gt;

class YourController : Controller
   YourClass _testing;

   YourController(IOptions<ConnectionConfig> connectionConfig)
       var connection = connectionConfig.Value;
       string connectionString = connection.Analysis;
       _testing = new YourClass(connectionString );
    
   public IActionResult Index()  
        var testingData = _testing.ReadAll(); 
        return View(); 
     
 

【讨论】:

这是一个巨大的帮助。一个简单的后续问题:在控制器中调用它时,我现在如何传递一个参数(特别是什么类型,因为我不熟悉IOptions)?例如,我将在这里作为参数传递什么:public IActionResult Index() var testing = new YourClass(); var testingData = testing.ReadAll(); return View(); 您也可以在控制器的构造函数中注入 IOptions,并像我为 YourClass 所做的那样做同样的事情 现在添加了 IOptions 的控制器实现 我现在正在处理它,通过你的实现我仍然遇到错误:“无法从'字符串'转换为 IOptions”就在这里:_testing = new DataBaseData(connectionString) 您确定要添加这一行,string connectionString = connection.Analysis; 吗?告诉我你的实现。从上面的部分很难得到错误

以上是关于网络核心连接字符串 Dapper Visual Studio 2017的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET 中使用 Dapper 处理数据库连接?

调试 Dapper Contrib(或任何 ORM) - 如何在 Visual Studio 中查看生成的 SQL - 例如更新?

.Net Core中Dapper的使用详解

在 asp.net 核心上使用 Dapper 插入

使用 Windows 身份验证远程访问的 Visual Basic Sql 连接字符串

创建多个连接查询 - Dapper