网络核心连接字符串 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<ConnectionConfig>
。
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的主要内容,如果未能解决你的问题,请参考以下文章
调试 Dapper Contrib(或任何 ORM) - 如何在 Visual Studio 中查看生成的 SQL - 例如更新?