ASP.NET Core MVC怎么用EF Core EF Core在MVC中的应用

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

ASP.NET Core MVC 中使用 EF Core,核心是把数据访问逻辑和 Web 层解耦,同时利用依赖注入(DI)自动管理 DbContext 生命周期。关键不是“能不能用”,而是“怎么组织更清晰、安全、可维护”。

1. 安装 EF Core 和数据库提供程序

在项目中安装对应 NuGet 包,比如 SQL Server:

Microsoft.EntityFrameworkCore.SqlServer(主数据库驱动) Microsoft.EntityFrameworkCore.Tools(支持迁移命令,如
dotnet ef migrations add
如果用 SQLite 或 PostgreSQL,换对应提供程序即可

2. 定义模型与 DbContext

先写实体类(比如

Product.cs
),再创建继承
DbContext
的类(比如
AppDbContext.cs
):

OnModelCreating
中配置关系、索引、种子数据(可选)
不要在 DbContext 构造函数里写业务逻辑,保持轻量 确保每个 DbContext 实例只服务一次请求(默认 Scoped 模式已满足)

3. 注册 DbContext 到 DI 容器

Program.cs
(.NET 6+)中配置:

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
连接字符串从
appsettings.json
读取,便于环境切换
不推荐手动 new DbContext,避免生命周期混乱和内存泄漏 如需不同连接或上下文隔离(如多租户),可用命名注册或工厂模式

4. 在 Controller 中使用(推荐方式)

通过构造函数注入 DbContext,而不是在 Action 里 new:

public class ProductsController : Controller
{
    private readonly AppDbContext _context;
    public ProductsController(AppDbContext context) => _context = context;
    public async Task<IActionResult> Index() =>
        View(await _context.Products.ToListAsync());
}
异步方法(
ToListAsync
FirstOrDefaultAsync
)应优先使用,避免线程阻塞
避免在 View 中直接调用
_context.Xxx
—— 违反分层原则,也容易引发延迟加载异常
简单查询可直接用,复杂逻辑建议抽到 Repository 或 Service 层(按项目规模决定)

基本上就这些。EF Core 和 MVC 配合很自然,重点是别绕过 DI、别手动管理上下文、别在视图里查数据。做对这三点,基础应用就很稳了。

相关推荐