五分钟带你快速上手EFCore操作MySQL

1.EFCore简介

Entity Framework Core 是一个轻量级、跨平台的 ORM 框架,它允许 .NET 开发人员通过面向对象的方式访问数据库。EF Core 可以与各种关系型数据库进行交互,包括 SQL Server、MySQL、PostgreSQL 和 SQLite 等。

2.相关依赖安装

Microsoft.EntityFrameworkCore

Microsoft.EntityFrameworkCore.Tools

Pomelo.EntityFrameworkCore.MySql

注意版本的选择尽量与.NET版本一致,我这里使用的.NET6.0。

3 配置MySQL连接信息

在appsettings.json中添加mysql连接配置如下

  "ConnectionStrings": {
    "tarefasConnection": "server=localhost;port=3306;uid=root;pwd=123456;database=partner"
  }

4 新建User类和UserContext类

代码如下:

User.cs

using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace WebApplication4.db
{
    public class User
    {
        [Key]
        [Column("id")]
        public int Id { get; set; }
        [Column("username")]
        public string UserName { get; set; } = null!;

        [Column("password")]
        public string PassWord { get; set; } = null!;

        [Column("departmentname")]
        public string DepartmentName { get; set; } = null!;
    }
}

UserContext.cs

using Microsoft.EntityFrameworkCore;
using WebApplication4.db;


/// <summary>
/// 这个类用于管理与数据库的交互。
/// </summary>
public partial class UserContext : DbContext
{
    public UserContext()
    {
    }

    public UserContext(DbContextOptions<UserContext> options) : base(options)
    {
    }

    //这行代码定义了一个 User 属性,该属性表示数据库中的用户表。
    //通过在 DbContext 中声明这样的属性,Entity Framework Core 就能够跟踪和操作与该实体类相关联的数据库表。
    //当你对 User 属性进行查询、插入、更新或删除时,
    //Entity Framework Core 会负责将这些操作转化为相应的 SQL 查询并与数据库进行交互。
    public virtual DbSet<User> User { get; set; } = null!;

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.UseCollation("utf8_general_ci").HasCharSet("utf8");

        //指定表名为 "user",设置 "password" 列的最大长度为 200。
        modelBuilder.Entity<User>(entity =>
        {
            entity.ToTable("user");
            entity.Property(e => e.PassWord)
                .HasMaxLength(200)
                .HasColumnName("password");
        });

        OnModelCreatingPartial(modelBuilder);
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}

5 关于UserContext类的说明

UserContext类继承了DbContext这个类DbContextEFCore 中的一个核心类,它充当了应用程序和数据库之间的桥梁,负责管理与数据库的交互。它提供了一种表示数据模型、配置数据连接和执行数据库操作的方式。以下是 DbContext的主要功能和作用:

5.1 表示数据模型

DbContext类通过使用 DbSet<TEntity> 属性来表示数据库中的表。每个 DbSet<TEntity> 属性都对应一个实体类型,表示数据库中的一张表。这些实体类型通常是应用程序中的类,它们映射到数据库中的表结构。

public class MyDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Todo> Todos { get; set; }
    // 其他 DbSet<TEntity> 属性
}

5.2 配置数据库的连接

DbContext用于配置连接到数据库的信息,例如数据库的提供程序(SQL Server、MySQL、SQLite 等)、连接字符串、连接池大小等。这些配置通常在 OnConfiguring 方法中设置,或者通过构造函数传递 DbContextOptions

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer("your_connection_string");
}

5.3 执行数据库操作

DbContext提供了方法来执行对数据库的各种操作,例如查询、插入、更新和删除。这些方法包括 Set<TEntity>()Add()Update()Remove() 等。LINQ 查询也是通过 DbContext来执行的。

5.4 事务操作

DbContext支持事务操作,你可以在一个事务中执行一系列数据库操作,然后一次性提交或回滚。

using (var transaction = dbContext.Database.BeginTransaction())
{
    try
    {
        // 执行一系列数据库操作
        dbContext.SaveChanges();
        transaction.Commit();
    }
    catch (Exception)
    {
        transaction.Rollback();
    }
}

6 依赖注入

在program.cs中注入UserContext依赖。

builder.Services.AddDbContext<UserContext>(opt =>
{
    string connectionString = builder.Configuration.GetConnectionString("tarefasConnection");
    var serverVersion = ServerVersion.AutoDetect(connectionString);
    opt.UseMySql(connectionString, serverVersion);
});

7.执行迁移操作

7.1 什么是迁移

在 EFCore 中,迁移(Migration)是一种将数据模型的变化应用到数据库的机制。当你对应用程序的数据模型进行更改时,可能会涉及到添加新表、更改表结构、删除表等操作。为了使这些变化反映在数据库中,你需要执行迁移。步骤如下:

点击工具-->NuGet包管理器-->程序包管理控制台:

输入以下命令:

Add-Migration init
Update-Database

无报错的情况下,即完成迁移操作。此时在项目的目录下可以看到一个新的文件夹Migrations,是用于存储迁移文件的地方。UserContextModelSnapshot.cs里存放的是数据模型的快照快照(Snapshot)是用于记录数据模型当前状态的一个内部数据结构。它在迁移过程中发挥着重要的作用。当你创建迁移时,EF Core 使用快照来比较当前数据模型与之前迁移所生成的模型之间的差异,从而生成一个新的迁移。

7.1 打开Navicate查看表结构

8 数据增删改查接口

UserController.cs

using Microsoft.AspNetCore.Mvc;
using WebApplication4.db;

namespace WebApplication4.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UserController : ControllerBase
    {
        UserContext userContext;

        public UserController(UserContext userContext)
        {
            this.userContext = userContext;
        }


        /// <summary>
        /// 新增用户
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        /// <exception cref="Exception"></exception>
        [HttpPost]
        public ObjectResult AddUser([FromBody] User user)
        {
            try
            {
                userContext.User.Add(user);
                userContext.SaveChanges();
                return new ObjectResult("用户添加成功");
            }
            catch(Exception ex) 
            {
                throw ex;
            }
        }


        [HttpGet]
        public ObjectResult getUsers() {
            try
            {
                List<User> users = userContext.User.ToList();  //查出所有
                return new ObjectResult(users);
            }
            catch( Exception ex )
            {
                throw ex;
            }
        }

        [HttpDelete]
        public ObjectResult DelUserById(int id) {
            var user = userContext.User.Find(id);
            if (user != null)
            {
                try
                {
                    userContext.User.Remove(user);
                    userContext.SaveChanges();
                    return new ObjectResult("用户删除成功");
                }catch(Exception ex)
                {
                    throw ex;
                }
            
            }
            else
            {
                return new ObjectResult("用户不存在");
            }
        }


        [HttpPut]
        public ObjectResult update([FromBody]User user)
        {
            try
            {
                userContext.User.Update(user);
                userContext.SaveChanges();
                return new ObjectResult("修改成功");
            }catch(Exception ex)
            {
                throw ex;
            }
        }

    }
}

2024年3月22补充:

Scaffold-DbContext "server=localhost;userid=root;pwd=123456;port=3306;database=manager;sslmode=Preferred;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force

在程序包股那里控制台输入此命令可生成数据库中每个表对应的实体类。

  • 25
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 1. 安装TypeScript:使用 npm 命令 "npm install -g typescript" 安装 TypeScript。 2. 创建TypeScript文件:创建一个名为 "main.ts" 的文件,在其中编写 TypeScript 代码。 3. 编译TypeScript文件:使用命令 "tsc main.ts" 编译 TypeScript 文件,生成同名的 JavaScript 文件。 4. 运行JavaScript文件:使用命令 "node main.js" 运行编译生成的 JavaScript 文件。 5. 添加类型注解:在变量前加上类型注解,如 "let message: string = 'Hello World'"。 6. 添加类型检查:使用 "tsc --noEmit" 命令只进行类型检查而不生成 JavaScript 文件。 这些步骤可以帮助你在5分钟内快速上手 TypeScript。 ### 回答2: TypeScript是一种静态类型的编程语言,它是JavaScript的超集。要快速上手TypeScript,你可以按照以下步骤进行: 1. 安装TypeScript:首先,你需要在你的计算机上安装TypeScript。你可以使用Node.js包管理器(npm)或者使用TypeScript官方提供的安装包进行安装。 2. 创建TypeScript文件:在你的项目目录下,创建一个以`.ts`扩展名结尾的TypeScript文件。例如,你可以创建一个名为`example.ts`的文件。 3. 编写TypeScript代码:在刚才创建的TypeScript文件中,你可以使用JavaScript的语法以及TypeScript的类型注解来编写代码。TypeScript提供了一些新的语法和特性,例如类、接口、泛型等。 4. 编译TypeScript代码:在终端中,进入到你的项目目录,并使用TypeScript编译器(tsc)将TypeScript代码编译成JavaScript代码。你可以使用以下命令进行编译: ``` tsc example.ts ``` 5. 运行JavaScript代码:在编译成功后,你将得到一个与TypeScript文件同名的JavaScript文件(`example.js`)。你可以使用Node.js或者在浏览器中运行该JavaScript文件来查看结果。 以上就是使用TypeScript快速上手的基本步骤。当你熟悉了TypeScript的基本语法和特性后,你可以进一步学习TypeScript的高级特性,如模块化、异步编程等。还可以结合一些TypeScript的开发工具,如编辑器插件、调试工具等,来提升你的开发效率。 ### 回答3: 要快速上手TypeScript,你可以按照以下步骤进行操作: 1. 安装TypeScript:首先,你需要在你的计算机上安装TypeScript编译器。你可以通过npm(Node Package Manager)来安装它,使用下面的命令: ``` npm install -g typescript ``` 2. 创建一个TypeScript文件:在你的项目中,创建一个后缀名为`.ts`的TypeScript文件。 3. 确定编译选项:在你的项目根目录下创建一个`tsconfig.json`文件,用于配置TypeScript编译器的选项。你可以根据需要选择不同的选项,比如目标版本、模块系统等。 4. 编写TypeScript代码:在TypeScript文件中编写你的代码。TypeScript是一种强类型的编程语言,它提供了类、接口、枚举等丰富的语言特性。 5. 编译TypeScript代码:使用以下命令将你的TypeScript代码编译为JavaScript代码: ``` tsc ``` 6. 运行JavaScript代码:在编译成功后,你将得到一个后缀名为`.js`的JavaScript文件。你可以使用任何支持JavaScript的环境(如浏览器、Node.js等)来运行这些代码。 7. 运行时类型检查:TypeScript还提供了运行时类型检查的功能。你可以使用像`typeof`、`instanceof`等运算符来进行类型检查,确保程序的运行过程中类型的正确性。 通过按照上述步骤进行操作,你就可以快速上手TypeScript,并开始使用它来开发你的项目了。当然,为了更好地掌握TypeScript的更高级特性和最佳实践,你可能需要进一步学习和实践。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔神小卢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值