.net core 1为1个查询添加只读数据库连接

时间:2016-09-27 22:42:57

标签: c# asp.net-core

我有一个由其他网络API使用的数据库。我需要在我的应用程序中针对一个表和两个字段对此数据库进行一次DB select查询。我看到我可以通过这个link在.net core 1中使用一些工具创建数据库的第一个数据库上下文。但是,为数据库创建整个DBContext似乎很苛刻,因为Web api会发生变化。另外我不应该写它。所以我可以在SQL服务器中更改访问权限,供用户只选择。另外我想把我的sql连接字符串放在我的appsettings.json文件中,包含所有其他连接字符串。

问题:是否可以在我的控制器中设置类似于:

的sqlconnection
private readonly SqlConnection dbCon = new SQLConnection(Configuration.GetConnectionString("DBCon"));

我的appsettings.json文件中定义了我的DBCon。当我尝试使用上述内容时,我收到错误:

  

当前上下文中不存在名称配置。

显然,配置不是从appsettings.json获取设置的答案。

我需要为一个简单的查询设置一个快速的sql连接,这个查询在没有大量配置的情况下不会接受任何用户输入。任何帮助将不胜感激。

在4.6中的控制台应用程序中,我可以使用ConfigurationManager从app.config获取连接字符串。不知道如何从appsettings.json中获取它。它可能是在Startup.cs中获得它但不确定如何在其中获取它并使其可用于控制器。

更新 AppSettings.json如下:

{
 "ConnectionStrings": {
    "DefaultConnection": "valid Connection String",
    "DBCon": "valid Connection String"
  }, ....

1 个答案:

答案 0 :(得分:1)

您可以(并且应该)使用依赖注入来实现此目的。

我会创建一个简单的服务,它有一个执行查询的方法。服务类可以通过IOptions实例注入连接字符串。或者,您可以将选项直接注入控制器。

OtherDbOptions

public class OtherDbOptions
{
    public string ConnectionString { get; set; }
}

OtherDbService

public class OtherDbService
{
    private readonly string _connectionString;

    public OtherDbService(IOptions<OtherDbOptions> options)
    {
        _connectionString = options.Value.ConnectionString;
    }

    public object GetData()
    {
        // create your database connection and return data
    }
}

启动

public void ConfigureServices(IServiceCollection services)
{
    // add options services
    services.AddOptions();

    // configure OtherDbOptions using code
    services.Configure<OtherDbOptions>(options =>
    {
        options.ConnectionString = "value from appsettings.json";
    });

    // register OtherDbService for DI
    services.AddTransient<OtherDbService>();

    // other configurations
    ...
}

控制器(选项1 - 注入服务)

public OtherDbController(OtherDbService service)
{
    _service = service;
}

控制器(选项2 - 注入选项)

public OtherDbController(IOptions<OtherDbOptions> options)
{
    _options = options.Value;
}