【问题标题】:.net core 1 adding read only DB connection for 1 query.net core 1 为 1 个查询添加只读数据库连接
【发布时间】:2016-09-27 22:42:56
【问题描述】:

我有一个由另一个 Web api 使用的数据库。我需要在我的应用程序中针对一个表和两个字段对该数据库进行一个 DB 选择查询。我看到我可以通过这个link 在.net core 1 中使用一些工具创建一个数据库优先的数据库上下文。然而,为一个可能随着 web api 变化而变化的数据库创建整个 DBContext 似乎很繁重。此外,我不应该写信给它。因此,我可以更改 SQL Server 中的访问权限,以供用户选择。此外,我想将我的 sql 连接字符串与所有其他连接字符串一起放入我的 appsettings.json 文件中。

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

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

我的 DBCon 是在我的 appsettings.json 文件中定义的。当我尝试使用上述内容时,出现错误:

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

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

我需要为一个简单的查询设置一个快速的 sql 连接,该查询不需要任何用户输入而无需大量配置。任何帮助将不胜感激。

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

更新: AppSettings.json 如下:

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

【问题讨论】:

  • 发布正确的代码。上面的不是真正的代码。您不能将字符串分配给 SqlConnection
  • @Tseng 抱歉我更新了。这是我试图实现的一个示例。
  • 你的 appsettings.json 呢?
  • @Tseng 查看更新。
  • 你打电话给这个吗? Configuration 属性只能在启动期间在 Startup.cs 类中访问,并且没有理由在外部访问它,因为现在可以使用 ASP 将依赖项和选项 (IOptions<T>) 注入到其他类和服务中。 NET 核心

标签: c# asp.net-core


【解决方案1】:

您可以(并且应该)使用依赖注入来实现这一点。

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

其他数据库选项

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

其他数据库服务

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-27
    • 2010-12-12
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多