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

这篇具有很好参考价值的文章主要介绍了五分钟带你快速上手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

efcore mysql,mysql,数据库,c#,开发语言

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

3 配置MySQL连接信息

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

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

efcore mysql,mysql,数据库,c#,开发语言

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);
});

efcore mysql,mysql,数据库,c#,开发语言

7.执行迁移操作

7.1 什么是迁移

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

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

efcore mysql,mysql,数据库,c#,开发语言

输入以下命令:

Add-Migration init
Update-Database

efcore mysql,mysql,数据库,c#,开发语言

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

efcore mysql,mysql,数据库,c#,开发语言

7.1 打开Navicate查看表结构

efcore mysql,mysql,数据库,c#,开发语言

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

在程序包股那里控制台输入此命令可生成数据库中每个表对应的实体类。文章来源地址https://www.toymoban.com/news/detail-854135.html

到了这里,关于五分钟带你快速上手EFCore操作MySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】静态库和共享库一分钟快速上手

    程序库,对于程序原来说是非常重要的。但不少人对其不太了解,接下来一起学习其中的奥秘吧! 简单来说,程序库可以分为静态库和共享库。它们包含了数据和执行代码的文件。其不能单独执行,可以作为其他执行程序的一部分来完成某些功能。库的存在,可以使得程序模

    2024年02月08日
    浏览(26)
  • vue3探索——5分钟快速上手大菠萝pinia

    温馨提示:本文以vue3+vite+ts举例,vite配置和ts语法侧重较少,比较适合有vuex或者vue基础的小伙伴们儿查阅。 yarn npm pnpm 在 src/main.ts 中引入pinia(根存储),并传递给应用程序。 在根目录下新建文件夹,这里我命名为 store ,再在文件夹下新建一个 index.ts 文件( src/store/index.ts

    2024年02月09日
    浏览(24)
  • 【Mysql】万字长文带你快速掌握数据库基础概念及SQL基本操作

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的

    2024年02月15日
    浏览(44)
  • Git | 一文带你零基础快速上手Git

    👑 博主简介 :    🥇 Java领域新星创作者    🥇 阿里云开发者社区专家博主、星级博主、技术博主 🤝 交流社区 :BoBooY(优质编程学习笔记社区) 前言 :本文适合零基础小白学习以及学过Git的小伙们复习使用,本文细节的讲述了Git的安装与卸载以及企业开发中需要用

    2024年02月02日
    浏览(71)
  • [Git] Git零基础?带你快速入门,示例练习上手

    😚一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:算法学习 🤗专栏:Go实战 💬个人主页:个人主页 参考学习资料:黑马程序员Git教程

    2024年02月05日
    浏览(26)
  • 【开源串口屏方案】五步教你设计串口屏,5分钟快速上手

    目录 前言 一、什么是串口屏? 二、串口屏原理与组成 三、硬件制作 四、实现方法 1.硬件设备 2.环境依赖 3.界面设计 4.编写串口通信代码和示例  本文详细介绍串口屏原理、设计方法、实现步骤,给出完整代码实例,30分钟即可完成串口屏的设计使用。适合初学者快速上手。

    2024年02月05日
    浏览(27)
  • 10分钟快速上手LLM大模型Python前端开发(三)之显示模块(一)

    微信公众号:leetcode_algos_life,代码随想随记 小红书:412408155 CSDN:https://blog.csdn.net/woai8339?type=blog GitHub: https://github.com/riverind 抖音【暂未开始,计划开始】:tian72530 知乎【暂未开始,计划开始】:happy001 本系列主要应用于大模型前端展示,十分钟快速上手前端系列。 该文章

    2024年01月16日
    浏览(34)
  • 【零基础入门Python】26段简短代码带你快速上手Python

    本文示例代码使用的Python版本为Python 3.6。运行Python代码有两种方式: 一种方式是启动Python,然后在命令窗口下直接输入相应的命令; 另一种方式就是将完整的代码写成.py脚本,如hello.py,然后在对应的路径下通过python hello.py执行。 hello.py脚本中的代码如下: 脚本的执行结果

    2024年02月09日
    浏览(33)
  • 什么是软件测试?5分钟带你快速了解!

    经常有人问我,你的公司是做什么的?我回答“软件测试”,看着对方一脸的迷茫。何为软件测试?软件测试究竟测试什么? 软件测试是伴随着软件工程的重要组成部分,是软件质量保证的重要前提。软件测试是为了尽快尽早地发现在软件产品中所存在的各种软件缺陷而展开

    2024年02月08日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包