【问题标题】:How can I connect to a database in ASP.NET Core without Entity Framework?如何在没有实体框架的情况下连接到 ASP.NET Core 中的数据库?
【发布时间】:2019-11-19 18:08:59
【问题描述】:

如何在没有 Entity Framework 的情况下从 ASP.NET Core 和 Angular 连接到数据库?

 "ConnectionStrings": {
    "DefaultParkingConnection": "Server=DESKTOP-CD0M0C3\\SQLEXPRESS;Database=ParkingSystem2;Trusted_Connection=True;MultipleActiveResultSets=true;User ID=sa;Password=P@ssw0rd"
  }, 

如何在 Web API 控制器中获取连接字符串?

string constr = ConfigurationManager.ConnectionStrings["DefaultParkingConnection"].ConnectionString;

【问题讨论】:

  • @jophab \- 我想要 web api 控制器的连接字符串..
  • 我没明白你的意思.. 你是在询问 url 以实现控制器操作吗?
  • 使用 Dapper,它是 ADO.NET 的一个很好的包装器。顺便说一句,您的问题与 Angular 无关。 Angular 是该层无法直接与数据库层通信的前端
  • @jophab 不,我已经在 appsettings.json 文件中定义了我的连接字符串。现在我想在我的 web api 控制器中访问它..(注意:asp.net 核心)

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:

ASP.Net Core 的工作方式与 ASP.Net 不同,因此您需要将appsettings.json 中定义的连接字符串映射到要在整个应用程序中访问的类或变量。尝试以下方法。创建appSettings.json

{
"ConnectionStrings": {
    "DefaultParkingConnection": "Server=DESKTOP-CD0M0C3\\SQLEXPRESS;Database=ParkingSystem2;Trusted_Connection=True;MultipleActiveResultSets=true;User ID=sa;Password=P@ssw0rd"
  }
}

创建一个新类ConnectionStrings.cs,将appSettings.json中定义的连接字符串映射到它:

using System;

namespace Test
{
    public class ConnectionStrings 
    {
        public string DefaultParkingConnection{ get; set; }
    }
}

Startup.cs中,编写如下代码:

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        this.Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        //Map the configuration
        var connectionSection = Configuration.GetSection("ConnectionStrings");
        services.Configure<ConnectionStrings>(connectionSection );            
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Configure 
    }
}

现在在控制器中,您无需创建类的实例即可轻松使用它:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;

namespace Test.Controllers
{
    [ApiController]
    [Route("api/account")]
    public class AccountController : ControllerBase
    {
        private readonly ConnectionStrings connectionStrings;

        public AccountController(IOptions<ConnectionStrings> connectionStrings)
        {
            this.connectionStrings = connectionStrings.Value;
        }

        [HttpGet, Route("test")]
        public IActionResult Test()
        {
            return Ok("test");
        }
    }
}

【讨论】:

  • 感谢您抽出宝贵的时间来回答我。这段代码帮助了我..
  • 很高兴有帮助。干杯!
  • 如何访问路由才能知道是否有连接?
【解决方案2】:

您可以在 api 控制器中注入 IConfiguration

public class ValuesController : Controller
{
    public IConfiguration _configuration { get; }

    public ValuesController(IConfiguration configuration)
    {
        _configuration = configuration;

        string constr  = _configuration.GetConnectionString("DefaultParkingConnection");
    }
}

【讨论】:

    【解决方案3】:

    微软刚刚发布了用于访问 ado.net 的 asp.net core 的 sqlclient。

    来自包管理器

    Install-Package Microsoft.Data.SqlClient -Version 1.0.19269.1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-17
      • 2019-04-10
      • 1970-01-01
      • 2017-10-05
      • 2021-04-22
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多