EF Core如何创建DbContext EF Core创建DbContext方法

来源:这里教程网 时间:2026-02-21 17:42:06 作者:

在 EF Core 中创建

DbContext
主要通过继承
DbContext
类并重写其构造函数和
OnModelCreating
方法来实现,核心是配置数据库连接与实体映射关系。

定义自定义 DbContext 类

新建一个类(如

AppDbContext
),继承
Microsoft.EntityFrameworkCore.DbContext
,并在构造函数中接收
DbContextOptions<tcontext></tcontext>
参数:

这是 EF Core 推荐的构造方式,支持依赖注入和多种配置来源(如连接字符串、内存数据库等) 必须调用基类构造函数
base(options)
通常在
OnModelCreating
中配置实体关系、索引、约束等 Fluent API 规则
示例:
public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Post>()
            .HasOne(p => p.Blog)
            .WithMany(b => b.Posts)
            .HasForeignKey(p => p.BlogId);
    }
}

注册 DbContext 到服务容器

Program.cs
(.NET 6+)或
Startup.cs
中,使用
AddDbContext<tcontext></tcontext>
将上下文注册为服务:

推荐使用
AddDbContextPool
提升高并发场景性能(连接池复用)
连接字符串一般从配置文件(如
appsettings.json
)读取,避免硬编码
可指定生命周期:Scoped(默认,每个请求一个实例)、Transient 或 Singleton(慎用) 示例(Program.cs):
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(connectionString));

手动创建 DbContext 实例(不推荐常规使用)

仅在测试、控制台工具或无 DI 环境下临时使用,需自行管理生命周期和连接:

创建
DbContextOptionsBuilder
,调用
UseSqlServer
等方法配置提供程序
构建
DbContextOptions<t></t>
后传入构造函数
务必手动调用
Dispose()
或使用
using
语句释放资源
示例:
var options = new DbContextOptionsBuilder<AppDbContext>()
    .UseSqlServer("Server=.;Database=TestDb;Trusted_Connection=true;")
    .Options;
using var context = new AppDbContext(options);
var blogs = context.Blogs.ToList();

常见注意事项

避免踩坑的关键点:

不要在
DbContext
中存储静态连接或共享
DbSet
实例
确保每个线程/请求使用独立的
DbContext
实例(Scoped 生命周期已保障)
若启用延迟加载,需安装
Microsoft.EntityFrameworkCore.Proxies
并调用
UseLazyLoadingProxies()
迁移命令(如
dotnet ef migrations add
)依赖正确注册的上下文类型和配置

基本上就这些。核心就是“继承 + 构造注入 + 容器注册”,不复杂但容易忽略生命周期和配置一致性。

相关推荐