ZetCode

ASP.NET Entity Framework

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 Entity Framework。Entity Framework 是一个强大的 ORM,可以简化 .NET 应用程序中的数据库操作。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Entity Framework 提供对象关系映射功能。

基本定义

Entity Framework (EF) 是一个对象关系映射器 (ORM),它使 .NET 开发人员能够使用 .NET 对象与数据库进行交互。它消除了对大多数数据访问代码的需求。

EF Core 是 Entity Framework 的轻量级、可扩展版本,适用于 .NET。它支持多种数据库提供程序,包括 SQL Server、SQLite 和 MySQL。

Entity Framework 使用 LINQ 从数据库中查询数据。它会跟踪对象的更改,并自动将它们持久化回数据库。

ASP.NET Entity Framework 示例

以下示例演示了一个使用 Entity Framework Core 的基本 Web API。

Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));

builder.Services.AddControllers();
var app = builder.Build();

app.MapControllers();
app.Run();

这会设置一个带有 Entity Framework Core 的 ASP.NET 应用程序。AddDbContext 方法会注册数据库上下文。

Models/Product.cs
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public DateTime CreatedDate { get; set; } = DateTime.UtcNow;
}

这定义了我们的 Product 实体类。Entity Framework 会将此类映射到数据库表。属性将成为表中的列。

Data/AppDbContext.cs
using Microsoft.EntityFrameworkCore;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options) { }

    public DbSet<Product> Products { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Product>().HasData(
            new Product { Id = 1, Name = "Laptop", Price = 999.99m },
            new Product { Id = 2, Name = "Mouse", Price = 19.99m },
            new Product { Id = 3, Name = "Keyboard", Price = 49.99m }
        );
    }
}

AppDbContext 表示数据库会话。DbSet<Product> 属性允许查询 Products 表。

OnModelCreating 方法会将初始数据填充到数据库中。这对于开发和测试目的很有用。

Controllers/ProductsController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    private readonly AppDbContext _context;

    public ProductsController(AppDbContext context)
    {
        _context = context;
    }

    [HttpGet]
    public async Task<IActionResult> GetAllProducts()
    {
        var products = await _context.Products.ToListAsync();
        return Ok(products);
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetProductById(int id)
    {
        var product = await _context.Products.FindAsync(id);
        if (product == null) return NotFound();
        return Ok(product);
    }

    [HttpPost]
    public async Task<IActionResult> CreateProduct(Product product)
    {
        _context.Products.Add(product);
        await _context.SaveChangesAsync();
        return CreatedAtAction(nameof(GetProductById), 
            new { id = product.Id }, product);
    }
}

此控制器演示了使用 Entity Framework 的基本 CRUD 操作。AppDbContext 通过构造函数依赖项注入进行注入。

GetAllProducts 方法从数据库检索所有产品。ToListAsync 异步执行查询。

GetProductById 方法通过主键查找单个产品。FindAsync 针对主键查找进行了优化。

CreateProduct 方法演示了添加新实体。更改会使用 SaveChangesAsync 保存到数据库。

来源

Microsoft Entity Framework Core 文档

在本文中,我们探讨了 ASP.NET 8 中的 Entity Framework。这个强大的 ORM 简化了数据库操作并提高了开发人员的生产力。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有超过十年的经验。

列出所有 ASP.NET 教程