在.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