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

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/245258.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Endnote加入新的style(参考文献格式)

1. 下载模板 可以从官网上下载模板&#xff0c;比如某些常见的期刊都有自己的模板&#xff0c;还有写中文论文的话有专门的GBT7714。 2. 示范 以下图MDPI为例&#xff0c;下载下来是一个ens文件。 双击打开此文件 file -> save as 输入保存的名字&#xff0c;我这里保…

根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图

1. 效果图 2. 认识result内容 2.1 YOLOv7的result.txt 参考链接&#xff1a;YOLOv7结果分析&#xff0c;txt文件内容 0/299 14.7G 0.07522 0.009375 0.02266 0.1073 58 640 0.0002958 0…

逆波兰表达式求值

逆波兰表达式求值 一:中缀表达式和逆波兰表达式二&#xff1a;力扣&#xff1a;[逆波兰表达式求值](https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/)二&#xff1a;原理&#xff1a;三:代码实现&#xff1a; 一:中缀表达式和逆波兰表达式 中缀表达式就是…

Centos图形化界面封装OpenStack Centos镜像

目录 背景 环境 宿主机环境安装 创建与安装Centos7.8虚机 虚机设置 安全相关 安装ACPI服务 安装cloud-init 安装cloud-utils-growpart 停⽌虚拟机 删除个性化信息 模板化与压缩 登录与验证 背景 今天早上在Centos官网下载的CentOS-7-aarch64-GenericCloud-2003.…

Kali Linux三种网络攻击方法总结(DDoS、CC和ARP欺骗)

本文章使用的是Kali Linux的2020-4-installer-amd64版本 Kali Linux的安装过程本文章不做过多说明&#xff0c;请自行百度 请正确使用DDos和CC攻击&#xff0c;不要用来做违反当地法律法规的事情&#xff0c;否则后果自负 CSDN大礼包&#xff1a;《黑客&网络安全入门&am…

CSS、JS文件无法正确加载至页面问题与解决

目录 1. 问题出现 2. 分析与解决 3. 总结 1. 问题出现 自己在写项目是时候&#xff0c;想启动浏览器查询首页面index.jsp的显示效果 预期效果应该是下面这样的&#xff1a; 但是实际上是这样的&#xff1a; 意思也就是说可能是关于CSS、JS相关的引入方面出了问题&#xff…

百为智能流控路由器 RCE漏洞复现

0x01 产品简介 BYTEVALUE 百为流控路由器是一款追求带宽利用率的多功能路由器。 0x02 漏洞概述 百为智能流控路由器 /goform/webRead/open 路由的 ?path 参数存在有回显的命令注入漏洞,未经身份认证的攻击者可以利用此漏洞执行任意指令&#xff0c;获取服务器权限。 0x03 复…

代码随想录算法训练营第41天| 343. 整数拆分 96.不同的二叉搜索树

JAVA代码编写 343. 整数拆分 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。示例 2: 输入: n 10…

Optional源码分析(涉及Objects源码和Stream源码)

研究Optional源码之前先谈一谈Objects源码。 主要代码&#xff1a; ForceInlinepublic static <T> T requireNonNull(T obj) {if (obj null) {throw new NullPointerException();} else {return obj;}}ForceInlinepublic static <T> T requireNonNull(T obj, Str…

单个 Zip 文件体积超过 40GB

单个 Zip 文件体积超过 40GB WinRAR 平时用的多,不过有时候为了更好的通用性,也常常用到 zip 格式.查了一下资料,说是 zip 单个文件的体积不能超过 4GB. 自己动手试了下,用 WinRAR 创建出来的 zip 文件,大小可以超过 40GB, 如下图 为了压缩速度快,压缩方式用的是 “存储” Wi…

PHP使用HTTP代码示例模板

PHP是一种广泛用于服务器端的编程语言&#xff0c;它提供了许多内置的函数和扩展&#xff0c;以便开发人员能够轻松地处理HTTP请求和响应。在PHP中&#xff0c;您可以使用以下代码示例模板来处理HTTP请求和生成HTTP响应。 php复制代码 <?php // 处理GET请求 if ($…

Synchronized关键字的底层原理

Synchronized实现 Synchronized创建的时候一个互斥的对象锁&#xff0c;每次只有一个线程可以获取该锁。 其底层主要是基于Monitor实现的&#xff0c;在对象的对象头中存储了MarkWord存储的就是Monitor的地址。 对象的内存结构 对象在内存中存储主要分为三个部分&#xff1a…