asp.net core之EfCore

发布时间 2023-08-07 11:25:35作者: 饭勺oO

EF Core(Entity Framework Core)是一个轻量级、跨平台的对象关系映射(ORM)框架,用于在.NET应用程序中访问和操作数据库。它是Entity Framework的下一代版本,专为.NET Core应用程序而设计。
EF Core提供了一种简单、灵活和高效的方式来与各种数据库进行交互,它通过将数据库表映射为.NET对象,并提供了一组强大的查询语言和操作API,使开发人员能够以面向对象的方式进行数据库操作。
本文是一个简单的EF Core教程,演示了如何使用EF Core进行数据库操作。

1. 安装EF Core

首先,创建一个WebApi项目,我们需要安装EF Core。可以通过NuGet包管理器或使用dotnet命令行工具来安装EF Core。

dotnet add package Microsoft.EntityFrameworkCore

image.png

2. 定义模型类

在使用EF Core之前,我们需要定义一个或多个模型类,这些类将映射到数据库表。

namespace LearnEfCore.Entities
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}

上述代码定义了一个名为"Product"的模型类,表示一个产品对象。该类包含了Id、Name和Price属性,分别对应数据库表中的列。

3. 创建数据库上下文

接下来,我们需要创建一个派生自DbContext的数据库上下文类,用于定义数据库的连接和数据集。
这里我们需要使用什么数据库就需要对应安装该数据库的数据库提供程序。如SQLServer,Mysql,SQLite等等。这里为了方便,就用SQLite。

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
using LearnEfCore.Entities;
using Microsoft.EntityFrameworkCore;

namespace LearnEfCore
{
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options)
        {
        }
        public DbSet<Product> Products { get; set; }
    }
}

我们通过定义DbSet<Product>属性来表示数据库中的"Products"表。
接下来需要配置注入DbContext。

using LearnEfCore;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddDbContext<AppDbContext>(o => o.UseSqlite("Data Source=./LearnEfCore.db"));

这里UseSqlite指定了数据库连接字符串。

4. 进行数据库迁移

在使用EF Core之前,我们需要进行数据库迁移。迁移是将模型类映射到数据库表的过程。
这里需要注意的是,生成迁移文件需要安装Microsoft.EntityFrameworkCore.Design的包。

dotnet add package Microsoft.EntityFrameworkCore.Design

首先,打开命令行工具,并导航到项目的根目录。然后运行以下命令来创建一个新的迁移:

dotnet ef migrations add InitialCreate

上述命令将创建一个名为"InitialCreate"的迁移,它将根据模型类创建数据库表。
image.png
接下来,运行以下命令来应用迁移并创建数据库:

dotnet ef database update

上述命令将应用迁移并创建数据库。如果数据库已经存在,它将更新数据库以反映最新的模型更改。
image.png
使用连接工具查看Sqllite中的表。
image.png
image.png
__EFMigrationsHistory中记录是我们执行数据库迁移的记录。
image.png
Products表结构也对应我们的实体类的属性。

5. 进行数据库操作

现在,我们可以使用EF Core进行数据库操作。以下是一些常见的操作示例:
新建一个WebApi Controller,注入AppDbContext。

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace LearnEfCore.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ProductController : ControllerBase
    {
        private readonly AppDbContext _appDbContext;

        public ProductController(AppDbContext appDbContext)
        {
            _appDbContext = appDbContext;
        }
    }
}

添加新产品

[HttpPost]
public async Task<IActionResult> Add(Product product)
{
    _appDbContext.Products.Add(product);
    var res = await _appDbContext.SaveChangesAsync();
    return Ok(res);
}

上述代码创建了一个新的产品对象,并将其添加到数据库中。

image.png
image.png
成功插入数据。

查询产品列表

[HttpGet]
public async Task<IActionResult> List()
{
    var list = await _appDbContext.Products.ToListAsync();
    return Ok(list);
}

上述代码查询了所有产品。
image.png
数据正确响应。

更新产品

[HttpPut]
public async Task<IActionResult> Update(Product input)
{
    var product = await _appDbContext.Products.FirstOrDefaultAsync(p=>p.Id == input.Id);
    if(product != null)
    {
        product.Price = input.Price;
        product.Name = input.Name;
        await _appDbContext.SaveChangesAsync();
    }
    return Ok(product);
}

上述代码查找Id为1的产品,并更新其价格和名称。
image.png
image.png
查看数据库可以发现修改成功。

删除产品

[HttpDelete]
public async Task<IActionResult> Delete(int id)
{
    var product = await _appDbContext.Products.FirstOrDefaultAsync(p=>p.Id == id);
    if(product != null)
    {
        _appDbContext.Products.Remove(product);
        await _appDbContext.SaveChangesAsync();
    }
    return Ok();
}

上述代码查找Id为1的产品,并将其从数据库中删除。
image.png
image.png
查看数据库可以看到数据已经被删除。

总结

EF Core是一个功能强大且易于使用的ORM框架,它提供了一种简单的方式来进行数据库操作。通过定义模型类和数据库上下文,以及使用提供的API,开发人员可以轻松地进行各种数据库操作。无论是创建新的数据库还是与现有数据库进行交互,EF Core都是一个强大的选择。希望这个教程对你有所帮助!

欢迎进群催更。

image.png