.NET Core中如何使用Entity Framework操作PostgreSQL?

来源:网站建设作者:长沙网站建设头衔:草根站长
导读:本期聚焦于小伙伴创作的《.NET Core中如何使用Entity Framework操作PostgreSQL?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《.NET Core中如何使用Entity Framework操作PostgreSQL?》有用,将其分享出去将是对创作者最好的鼓励。

在.NET Core项目中使用Entity Framework操作PostgreSQL,需要完成依赖安装、上下文配置、实体定义以及具体操作实现几个核心步骤,整体流程清晰且易于上手。

.NET Core中如何使用Entity Framework操作PostgreSQL?

环境准备与依赖安装

首先需要创建.NET Core项目,然后在项目中安装操作PostgreSQL所需的NuGet包。打开NuGet包管理器,搜索并安装以下两个包:

  • Microsoft.EntityFrameworkCore
  • Npgsql.EntityFrameworkCore.PostgreSQL

安装完成后,就可以开始配置数据库上下文和实体类了。

定义实体类与数据库上下文

实体类对应数据库中的表结构,每个属性对应表中的一个字段。以下是一个用户实体类的示例:

// 用户实体类,对应数据库中的Users表
public class User
{
    // 主键,自增
    public int Id { get; set; }
    // 用户名
    public string UserName { get; set; }
    // 用户邮箱
    public string Email { get; set; }
    // 创建时间
    public DateTime CreateTime { get; set; }
}

接下来需要定义数据库上下文类,继承自DbContext,并在其中配置实体与表的映射关系:

using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    // 构造函数,接收上下文配置选项
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }

    // 定义Users表对应的DbSet
    public DbSet<User> Users { get; set; }

    // 可选:配置实体与表的映射细节
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 设置表名为Users,若类名和表名一致可省略
        modelBuilder.Entity<User>().ToTable("Users");
        // 设置UserName字段的最大长度为50
        modelBuilder.Entity<User>().Property(u => u.UserName).HasMaxLength(50);
        // 设置Email字段不能为空
        modelBuilder.Entity<User>().Property(u => u.Email).IsRequired();
    }
}

配置数据库连接

在项目的appsettings.json文件中添加PostgreSQL的连接字符串:

{
  "ConnectionStrings": {
    "PostgreSQLConnection": "Host=127.0.0.1;Port=5432;Database=TestDb;Username=postgres;Password=123456"
  }
}

然后在Program.cs中注册数据库上下文服务,将连接字符串传入:

using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 注册AppDbContext,使用PostgreSQL数据库提供程序
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("PostgreSQLConnection")));

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

执行数据库迁移

配置完成后,需要通过EF Core的迁移命令生成数据库表结构。打开程序包管理器控制台,依次执行以下命令:

# 添加迁移,迁移名称为InitialCreate
Add-Migration InitialCreate
# 将迁移应用到数据库,生成对应的表
Update-Database

执行完成后,PostgreSQL中会生成对应的Users表,表结构与我们定义的User实体类一致。

常见增删改查操作

新增数据

以下是一个新增用户数据的示例:

using (var context = new AppDbContext(new DbContextOptions<AppDbContext>()))
{
    // 创建新用户对象
    var newUser = new User
    {
        UserName = "张三",
        Email = "zhangsan@ipipp.com",
        CreateTime = DateTime.Now
    };
    // 将用户对象添加到DbSet
    context.Users.Add(newUser);
    // 保存更改到数据库
    context.SaveChanges();
}

查询数据

查询所有用户以及根据条件查询的示例:

using (var context = new AppDbContext(new DbContextOptions<AppDbContext>()))
{
    // 查询所有用户
    var allUsers = context.Users.ToList();
    // 根据Id查询单个用户
    var userById = context.Users.FirstOrDefault(u => u.Id == 1);
    // 根据用户名查询用户
    var userByName = context.Users.Where(u => u.UserName == "张三").ToList();
}

更新数据

更新用户邮箱的示例:

using (var context = new AppDbContext(new DbContextOptions<AppDbContext>()))
{
    // 查询要更新的用户
    var user = context.Users.FirstOrDefault(u => u.Id == 1);
    if (user != null)
    {
        // 修改用户邮箱
        user.Email = "zhangsan_new@ipipp.com";
        // 保存更改
        context.SaveChanges();
    }
}

删除数据

删除指定用户的示例:

using (var context = new AppDbContext(new DbContextOptions<AppDbContext>()))
{
    // 查询要删除的用户
    var user = context.Users.FirstOrDefault(u => u.Id == 1);
    if (user != null)
    {
        // 移除用户对象
        context.Users.Remove(user);
        // 保存更改
        context.SaveChanges();
    }
}

注意事项

在实际使用中,需要注意以下几点:

  • 连接字符串中的数据库地址、端口、用户名和密码需要根据实际环境修改,若使用本地PostgreSQL默认端口为5432
  • 迁移命令执行前需要确保项目已经正确编译,否则可能会出现命令执行失败的情况
  • 生产环境中不建议直接使用上下文的默认构造函数,应通过依赖注入获取上下文实例
  • 操作完成后及时释放上下文资源,避免数据库连接占用过多

.NET_CoreEntity_FrameworkPostgreSQLORM修改时间:2026-07-10 07:00:30

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。