Net8 EFCore Mysql 连接

一、安装插件

  • Pomelo.EntityFrameworkCore.MySq (这里要选8.0.0以上版本低版本不支持.net8)

二、配置数据库连接串

appsettings.json 中配置数据库连接串

复制代码
"ConnectionStrings": {
  "Connection": "server=172.18.2.183;port=3306;database=students;uid=root;pwd=123456;CharSet=utf8"
}

三、添加实体类Student和数据库上下文

新建 Entities 目录,在,根据表及字段,在目录下新建 Student 实体类,在类上加 [Table("student")] 表名、属性上加[Column("id")] 字段名等与表对应,代码如下:

复制代码
using System.ComponentModel.DataAnnotations.Schema;

namespace Snai.Mysql.Entities
{
    [Table("students")]
    public class Student
    {
        [Column("id")]
        public int ID { get; set; }

        [Column("name")]
        public string Name { get; set; }
    }
}

在根目录下加上 DataAccess 目录做为数据库操作目录,在该目录下加上 Base 目录做数据库上下文目录

在 Base 目录下新建 SqlContext 上下文类,继承 DbContext 类,通过构造函数注入数据库连接,添加 DbSet<Student> 实体属性,代码如下:

复制代码
using Microsoft.EntityFrameworkCore;
using Snai.Mysql.Entities;

namespace Server.DataAccess.Base
{
    public class SqlContext : DbContext
    {
        public SqlContext(DbContextOptions<SqlContext> options)
            : base(options)
        { }

        public DbSet<Student> Student { get; set; }
    }
}

在DataAccess目录下创建Interface和Implement文件夹分别为数据库对应数据的接口和实现。

接口定义:

复制代码
using Server.Mysql.Entities;

namespace Server.DataAccess.Interface
{
    public interface IStudentDao
    {
        //插入数据
        bool CreateStudent(Student student);

        //取全部记录
        IEnumerable<Student> GetStudents();

        //取某id记录
        Student GetStudentByID(int id);

        //根据id更新整条记录
        bool UpdateStudent(Student student);

        //根据id更新名称
        bool UpdateNameByID(int id, string name);

        //根据id删掉记录
        bool DeleteStudentByID(int id);
    }
}

实现:

复制代码
using Server.DataAccess.Base;
using Server.DataAccess.Interface;
using Server.Mysql.Entities;

namespace Server.DataAccess.Implement
{
    public class StudentDao : IStudentDao
    {
        private SqlContext _context;

        public StudentDao(SqlContext context)
        {
            _context = context;
        }

        //插入数据
        public bool CreateStudent(Student student)
        {
            _context.Student.Add(student);
            return _context.SaveChanges() > 0;
        }

        //取全部记录
        public IEnumerable<Student> GetStudents()
        {
            return _context.Student.ToList();
        }

        //取某id记录
        public Student? GetStudentByID(int id)
        {
            return _context.Student.SingleOrDefault(s => s.ID == id);
        }

        //根据id更新整条记录
        public bool UpdateStudent(Student student)
        {
            _context.Student.Update(student);
            return _context.SaveChanges() > 0;
        }

        //根据id更新名称
        public bool UpdateNameByID(int id, string name)
        {
            var state = false;
            var student = _context.Student.SingleOrDefault(s => s.ID == id);

            if (student != null)
            {
                student.Name = name;
                state = _context.SaveChanges() > 0;
            }

            return state;
        }

        //根据id删掉记录
        public bool DeleteStudentByID(int id)
        {
            var student = _context.Student.SingleOrDefault(s => s.ID == id);
            _context.Student.Remove(student);
            return _context.SaveChanges() > 0;
        }
    }
}

依赖注入

在Program.cs中写入

复制代码
string? sqlConnection = builder.Configuration.GetConnectionString("Connection");
if (sqlConnection != null) 
{
    builder.Services.AddDbContext<SqlContext>(options =>
    {
        var serverVersion = ServerVersion.AutoDetect(sqlConnection);  //mysql版本: {8.2.0-mysql}
        options.UseMySql(sqlConnection, serverVersion);
    });
}
builder.Services.AddScoped<IStudentDao, StudentDao>(); //对于同一个请求返回同一个实例

设计表

Controller调用

复制代码
private IStudentDao _iStudentDao;

public TestController(IStudentDao iStudentDao)  //构造函数中添加
{
    _iStudentDao = iStudentDao;
}

//调用测试方法创建
public void TestCreate()
{
    Student student = new Student();
    student.ID = 1;
    student.Name = "在下没有钱";
    _iStudentDao.CreateStudent(student);
}

运行结果:

相关推荐
Hello.Reader2 小时前
RedisJSON 路径语法深度解析与实战
数据库·redis·缓存
TDengine (老段)3 小时前
TDengine 使用最佳实践(2)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
设计师小聂!5 小时前
Linux系统中部署Redis详解
linux·运维·数据库·redis
kfepiza5 小时前
Debian-10编译安装Mysql-5.7.44 笔记250706
linux·数据库·笔记·mysql·debian·bash
Touper.5 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
不剪发的Tony老师5 小时前
phpMyAdmin:一款经典的MySQL在线管理工具又回来了
数据库·mysql·phpmyadmin
极限实验室6 小时前
TDBC 2025 可信数据库发展大会,极限科技邀您来赴约!
数据库
lixia0417mul27 小时前
使用Starrocks替换Clickhouse的理由
数据库
张璐月8 小时前
mysql的性能优化:组提交、数据页复用、全表扫描优化、刷脏页
数据库·mysql·性能优化
沐尘而生9 小时前
【AI智能体】智能音视频-搭建可视化智能体
数据库·人工智能·ai作画·音视频·娱乐