You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于Visual Studio Code连接PostgreSQL及C# ASP.NET Core项目集成查询库的技术咨询

关于Visual Studio Code连接PostgreSQL及C# ASP.NET Core项目集成查询库的技术咨询

嗨,我来帮你把这个误区掰正——你完全想错啦,Npgsql根本不是只能在Visual Studio里用的,它是C#生态里对接PostgreSQL的官方标准库,和你用VS Code还是Visual Studio半毛钱关系都没有,编辑器只是你写代码的工具,真正干活的是.NET的NuGet包呀!

我当初刚从Visual Studio转用VS Code搞.NET项目的时候,也有过类似的疑惑,现在给你一步步讲清楚怎么操作:

第一步:给你的ASP.NET Core项目装Npgsql相关包

打开VS Code里的项目终端(就是侧边栏下面那个Terminal标签,直接打开就行),根据你的需求选对应的包:

  • 如果你用EF Core(推荐,和ASP.NET Core的集成度最高,写查询更省心),安装这个包:
    dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
    
  • 如果你不想用EF Core,只想用纯ADO.NET写原生SQL查询,装基础包就行:
    dotnet add package Npgsql
    

第二步:配置连接字符串并写查询逻辑

用EF Core的情况

  1. 先在appsettings.json里配置PostgreSQL的连接字符串:
    "ConnectionStrings": {
      "PostgresDb": "Host=localhost;Database=你的数据库名称;Username=你的用户名;Password=你的密码"
    }
    
  2. 然后在Program.cs里注册你的DbContext:
    builder.Services.AddDbContext<YourAppDbContext>(options =>
        options.UseNpgsql(builder.Configuration.GetConnectionString("PostgresDb")));
    
  3. 之后就可以在服务或者控制器里注入DbContext,写LINQ查询了,比如:
    [ApiController]
    [Route("api/[controller]")]
    public class UsersController : ControllerBase
    {
        private readonly YourAppDbContext _dbContext;
    
        public UsersController(YourAppDbContext dbContext)
        {
            _dbContext = dbContext;
        }
    
        [HttpGet]
        public async Task<IActionResult> GetActiveUsers()
        {
            var activeUsers = await _dbContext.Users.Where(u => u.IsActive).ToListAsync();
            return Ok(activeUsers);
        }
    }
    

用纯ADO.NET的情况

如果就想写原生SQL,直接用Npgsql的连接对象就行,比如在控制器里:

using Npgsql;

[HttpGet("raw")]
public async Task<IActionResult> GetUsersRaw()
{
    var connString = builder.Configuration.GetConnectionString("PostgresDb");
    using var conn = new NpgsqlConnection(connString);
    await conn.OpenAsync();

    using var cmd = new NpgsqlCommand("SELECT id, name FROM users WHERE is_active = @active", conn);
    cmd.Parameters.AddWithValue("active", true);
    
    var users = new List<object>();
    using var reader = await cmd.ExecuteReaderAsync();
    while (await reader.ReadAsync())
    {
        users.Add(new {
            Id = reader.GetInt32(0),
            Name = reader.GetString(1)
        });
    }

    return Ok(users);
}

关于VS Code里的PostgreSQL扩展

你说的那些“只能连接查看的扩展”,其实是用来可视化管理数据库的(比如看表结构、手动跑测试SQL),它们和代码里的查询逻辑完全是两码事。这些扩展只是辅助工具,代码里的业务查询该写还是用Npgsql包来实现,和这些扩展没有依赖关系。

比如你可以装个PostgreSQL的VS Code扩展,平时用来手动验证数据、调试SQL,但代码里的业务查询该怎么写还是怎么写,两者互不影响。

最后再划个重点:别被编辑器局限住,.NET的NuGet包是跨编辑器的,只要你的项目是.NET项目,不管在VS Code还是Visual Studio里,都能正常使用Npgsql来操作PostgreSQL,放心用就行!

火山引擎 最新活动