EF Core + MySQL 基本增删改查

Core ,MySQL · 浏览次数 : 541

小编点评

**UsersController.cs** ```csharp [ApiController] [Route("api/[controller]")] public class UsersController : Controller { private readonly MyDataBaseContext_mian _dbmain; private readonly MyDataBaseContext_from _dbfrom; public UsersController(MyDataBaseContext_mian dbmain, MyDataBaseContext_from dbfrom) { _dbmain = dbmain; _dbfrom = dbfrom; } [HttpGet] // GET: UsersController public IEnumerable Index() { return _dbfrom.Users.ToList(); } [HttpGet("{id}")] // GET: UsersController/Details/5 public async Task Details(int? id) { return CreatedAtAction(nameof(Index), await _dbfrom.Users.AsNoTracking().FirstOrDefaultAsync(m => m.UserId == id)); } // POST: UsersController/Create [HttpPost] public async Task Create(User user) { _dbmain.Users.Add(user); await _dbmain.SaveChangesAsync(); return CreatedAtAction(nameof(Index), new { id = user.UserId }, user); } // POST: UsersController/Edit/5 [HttpPut(\"{id}\")] public async Task Edit(int? id, [FromBody] User user) { _dbmain.Set().Update(user); return await _dbmain.SaveChangesAsync() > 0; } // POST: UsersController/Delete/5 [HttpDelete(\"{id}\")] public async Task Delete(int id) { User user = new User(); user = await _dbmain.Users.FindAsync(id); if (user == null) { return RedirectToAction(nameof(Index)); } try { _dbmain.Users.Remove(user); await _dbmain.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } catch (DbUpdateException /* ex */) { //Log the error (uncomment ex variable name and write a log.) return RedirectToAction(nameof(Index), new { id = id, saveChangesError = true }); } } } ``` **其他说明:** * `MyDataBaseContext_mian` 和 `MyDataBaseContext_from` 变量是用于数据库连接的上下文对象。 * `_dbmain` 用于执行数据库操作的上下文。 * `_dbfrom` 用于读取数据库操作的上下文。 * `User` 是一个模型类,表示数据库中的 `User` 表的实体。

正文

前言

基于EF Core + MySQL的基本增删改查,示例是基于.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移项目基础上的内容增加。同时也是对基于Canal实现MySQL 8.0 数据库数据同步项目的验证。

创建控制器

Controllers---->添加---->控制器,选择api---->包含读写操作的API控制器。


依赖注入

将上下文类注入到UsersController中,ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式,这是一种在类及其依赖关系之间实现控制反转 (IoC) 的技术。有三种具体实现方式,我们这里用到的是构造函数注入,关于这块的内容,以后我们也可以专门出一期。直接上代码。

		private readonly MyDataBaseContext_mian _dbmain;
        private readonly MyDataBaseContext_from _dbfrom;
        public UsersController(MyDataBaseContext_mian dbmain, MyDataBaseContext_from dbfrom)
        {
            _dbmain = dbmain;
            _dbfrom = dbfrom;
        }

CRUD基本代码

一下内容是UsersController的完整内容

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using test.Models;
using test.MyDataBaseContext;

namespace test.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class UsersController : Controller
    {
        private readonly MyDataBaseContext_mian _dbmain;
        private readonly MyDataBaseContext_from _dbfrom;
        public UsersController(MyDataBaseContext_mian dbmain, MyDataBaseContext_from dbfrom)
        {
            _dbmain = dbmain;
            _dbfrom = dbfrom;
        }
        [HttpGet]
        // GET: UsersController
        public IEnumerable<User> Index()
        {
            return _dbfrom.Users.ToList();
        }

        [HttpGet("{id}")]
        // GET: UsersController/Details/5
        public async Task<IActionResult> Details(int? id)
        {
            return CreatedAtAction(nameof(Index), await _dbfrom.Users.AsNoTracking().FirstOrDefaultAsync(m => m.UserId == id));
        }

        // POST: UsersController/Create
        [HttpPost]
        public async Task<IActionResult> Create(User user)
        {
            _dbmain.Users.Add(user);
            await _dbmain.SaveChangesAsync();
            return CreatedAtAction(nameof(Index), new { id = user.UserId }, user);
        }

       // POST: UsersController/Edit/5
        [HttpPut("{id}")]
        public async Task<bool> Edit(int? id, [FromBody] User user)
        {
            _dbmain.Set<User>().Update(user);
            return await _dbmain.SaveChangesAsync() > 0;
        }

        // POST: UsersController/Delete/5
        [HttpDelete("{id}")]
        public async Task<IActionResult> Delete(int id)
        {

            User user = new User();

            user = await _dbmain.Users.FindAsync(id);
            if (user == null)
            {
                return RedirectToAction(nameof(Index));
            }
            try
            {
                _dbmain.Users.Remove(user);
                await _dbmain.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            catch (DbUpdateException /* ex */)
            {
                //Log the error (uncomment ex variable name and write a log.)
                return RedirectToAction(nameof(Index), new { id = id, saveChangesError = true });
            }

        }
    }
}

注:我对方法进行的改造,采用官网提供的新写法,有兴趣的小伙伴可以看看官网。

swagger接口测试文档看效果

向主库添加用户信息


从库查询用户信息

从库查询详细信息


主库修改用户信息

再从从库查询用户信息

删除用户信息



到此,EFCore的增删改查就完事了。有不懂的小伙伴可以把问题打在评论区,我来为大家解答。

与EF Core + MySQL 基本增删改查相似的内容:

EF Core + MySQL 基本增删改查

# 前言 基于EF Core + MySQL的基本增删改查,示例是基于[.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移](https://www.cnblogs.com/lym003/p/17411699.html)项目基础上的内容增加。同时也是对[基于Ca

.NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移

前言 接上期文章《.NET6项目连接数据库方式方法》,有人问了我几个问题,现在就这几个问题,拓展延申一下创建实体类、数据库。把ORM框架和数据迁移都写进去。 安装ORM框架,这里我们采用EFCore 安装EFCore 我的项目是在Linux上创建的,使用的是vscode开发工具远程开发。为了方便大家

一款EF Core下高性能、轻量级针对分表分库读写分离的解决方案

前言 今天大姚给大家分享一款EF Core下高性能、轻量级针对分表分库读写分离的解决方案,开源(Apache License)的EF Core拓展程序包:ShardingCore。 ShardingCore项目介绍 ShardingCore是一款开源、简单易用、高性能、普适性,针对EF Core生态

【EF Core】实体的主、从关系

假设有以下两个实体: public class Student { public int StuID { get; set; } public string? Name { get; set; } public IEnumerable? Homeworks { get; set;

【EF Core】主从实体关系与常见实体关系的区别

上次老周扯了有关主、从实体的话题,本篇咱们再挖一下,主、从实体之间建立的关系,跟咱们常用的一对一、一对多这些关系之间有什么不同。 先看看咱们从学习数据库开始就特熟悉的常用关系——多对多、一对一、一对多说起。数据实体之间会建立什么样的关系,并不是规则性的,而是要看数据的功能。比如你家养的狗狗和水果(你

EF Core从TPH迁移到TPT

Intro EF Core支持多种方式处理具有继承关系的表,现在支持TPH、TPC(EF Core 7)、TPT,具体的实现方式可以参考官方文档和这篇文章。 大致总结一下不同的方式的区别: TPH:所有的类型都放在一张表中,使用discriminator字段用以区别不同的类型 TPT:不同的子类型有

造轮子之ORM集成

Dotnet的ORM千千万,还是喜欢用EF CORE 前面一些基础完成的差不多了,接下来可以集成数据库了,官方出品的ORM还是比较香。所以接下来就是来集成EF CORE。 安装包 首先我们需要安装一下EF CORE的NUGET包,有如下几个: Microsoft.EntityFrameworkCor

使用EF 连接 数据库 SQLserver、MySql 实现 CodeFirst

1.新建项目,下载Nuget安装包 创建项目需要注意几点,如果是基于 .net framework 的项目 需要选择 相应版本的 EF, 如果是跨平台则选择EF Core版本。 我这里选择的是 .net framework 版本。红框里面是 实现EF Code First 需要的包。 对应的版本:

Ubuntu22.04 安装单机版kubernetes

# 前言 上期讲到要实现.net 6框架下的EF Core操作数据库基本增删改查,没有及时兑现。没有兑现的原因就是因为安装kubernetes。安装kubernetes的过程是灾难性的,也是十分顺利的。灾难性是因为在安装kubernetes过程中误操作,在/etc下执行了一个重置的命令导致我的工作站

efcore如何优雅的实现按年分库按月分表

efcore如何优雅的实现按年分库按月分表 介绍 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案,具有零依赖、零学习成本、零业务代码入侵适配 距离上次发文.net相关的已经有很久了,期间一直在从事java相关的