mysql .net core_ASP.NET Core使用EF Core操作MySql数据库

本文详细介绍了如何在 ASP.NET Core 应用中使用 Entity Framework Core (EF Core) 连接并操作 MySQL 数据库,包括创建数据库、定义实体、配置上下文、实现 CRUD 操作以及配置数据库连接字符串。整个过程支持部署在 Linux 环境下。
摘要由CSDN通过智能技术生成

ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上

使用微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql.Data.EntityFrameworkCore(8.0.13)

软件版本

Asp.net Core:2.1

MySql:5.6

项目结构

1d770e616b76db73e396815e87ae327a.png

Snai.Mysql 是 Asp.net core 2.0 Api网站,Database 下的是MySql建库建表脚本

项目实现

一、MySql 建库建表

使用 Database下的 mysql 建库 表 主键 索引.sql 脚本建库建表,脚本如下:

CREATE DATABASE alan CHARACTER SETutf8 COLLATE utf8_general_ci

;USEalan

;CREATE TABLEstudent(

idINT AUTO_INCREMENT PRIMARY KEY, --自增列需为主键

`name` NVARCHAR(32) NOT NULL DEFAULT '',

sexTINYINT NOT NULL DEFAULT 1, --0 男生,1 女生,2 保密

age INT NOT NULL DEFAULT 0)

;ALTER TABLE student ADD INDEX ix_student_name(`name`) --UNIQUE INDEX 唯一索引

建库时加上 CHARACTER SET utf8 COLLATE utf8_general_ci 代码,设置数据库字符集为 utf8,配合程序的数据库连接串加上 CharSet=utf8,防止中文保存时乱码

如果建库时不是utf8,就把字符集改为utf8

5f67838c206521a1c1b99a56d88c538d.png

e6543f6ff4caada15255709b614e1af7.png

91a3d406812f9628b8969a1add1dacc5.png

二、EF Core 连接操作 MySql 数据库

1、新建项目,添加EF Core 和 MySql驱动依赖项

新建 asp.net core api 网站程序,NuGet 添加依赖项 Microsoft.EntityFrameworkCore.Tools(2.1.4) 和 MySql.Data.EntityFrameworkCore(8.0.13) 包

61c15c72dda3fabfa560e093358b69a4.png

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

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

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel.DataAnnotations.Schema;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceSnai.Mysql.Entities

{

[Table("student")]public classStudent

{

[Column("id")]public int ID { get; set; }

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

[Column("sex")]public byte Sex { get; set; }

[Column("age")]public int Age { get; set; }

}

}

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

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

usingMicrosoft.EntityFrameworkCore;usingSnai.Mysql.Entities;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceSnai.Mysql.DataAccess.Base

{public classAlanContext:DbContext

{public AlanContext(DbContextOptionsoptions)

:base(options)

{ }public DbSet Student { get; set; }

}

}

3、添、删、改、查 数据库记录

在 DataAccess 目录下新建 Interface 目录,用于保存数据库操作的接口,在该目录下新建 IAlanDao 接口,在接口里增加 CreateStudent(),GetStudents(),GetStudentByID(),UpdateStudent(),UpdateNameByID(),DeleteStudentByID() 数据库 添、删、改、查接口,代码如下:

usingSnai.Mysql.Entities;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceSnai.Mysql.DataAccess.Interface

{public interfaceIAlanDao

{//插入数据

boolCreateStudent(Student student);//取全部记录

IEnumerableGetStudents();//取某id记录

Student GetStudentByID(intid);//根据id更新整条记录

boolUpdateStudent(Student student);//根据id更新名称

bool UpdateNameByID(int id, stringname);//根据id删掉记录

bool DeleteStudentByID(intid);

}

}

在 DataAccess 目录下新建 Implement 目录,用于保存数据库操作接口的实现,在该目录下新建 AlanDao 类,继承 IAlanDao 接口,实现接口里的数据库操作方法,在构造函数注入 AlanContext 数据库上下文,代码如下:

usingSnai.Mysql.DataAccess.Base;usingSnai.Mysql.DataAccess.Interface;usingSnai.Mysql.Entities;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceSnai.Mysql.DataAccess.Implement

{public classAlanDao: IAlanDao

{publicAlanContext Context;publicAlanDao(AlanContext context)

{

Context=context;

}//插入数据

public boolCreateStudent(Student student)

{

Context.Student.Add(student);return Context.SaveChanges() > 0;

}//取全部记录

public IEnumerableGetStudents()

{returnContext.Student.ToList();

}//取某id记录

public Student GetStudentByID(intid)

{return Context.Student.SingleOrDefault(s => s.ID ==id);

}//根据id更新整条记录

public boolUpdateStudent(Student student)

{

Context.Student.Update(student);return Context.SaveChanges() > 0;

}//根据id更新名称

public bool UpdateNameByID(int id, stringname)

{var state = false;var student = Context.Student.SingleOrDefault(s => s.ID ==id);if (student != null)

{

student.Name=name;

state= Context.SaveChanges() > 0;

}returnstate;

}//根据id删掉记录

public bool DeleteStudentByID(intid)

{var student = Context.Student.SingleOrDefault(s => s.ID ==id);

Context.Student.Remove(student);return Context.SaveChanges() > 0;

}

}

}

4、添加 StudentController 控制器,调用数据库操作方法

在 Controllers 目录下,添加 StudentController 控制器,在构造函数注入 AlanDao 数据库操作,在控制器里 创建 Create(),Gets(),Get(),Update(),UpdateName(),Delete()等方法,调用 AlanDao 数据库操作方法,代码如下:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingSnai.Mysql.DataAccess.Interface;usingSnai.Mysql.Entities;namespaceSnai.Mysql.Controllers

{public classStudentController : ControllerBase

{privateIAlanDao AlanDao;publicStudentController(IAlanDao alanDao)

{

AlanDao=alanDao;

}//插入数据

public ActionResult Create(string name, byte sex, intage)

{if (string.IsNullOrEmpty(name.Trim()))

{return "姓名不能为空";

}if (sex < 0 || sex > 2)

{return "性别数据有误";

}if (age <= 0)

{return "年龄数据有误";

}var student = newStudent() {

Name=name,

Sex=sex,

Age=age

};var result =AlanDao.CreateStudent(student);if(result)

{return "学生插入成功";

}else{return "学生插入失败";

}

}//取全部记录

public ActionResultGets()

{var names = "没有数据";var students =AlanDao.GetStudents();if (students != null)

{

names= "";foreach (var s instudents)

{

names+= $"{s.Name} \r\n";

}

}returnnames;

}//取某id记录

public ActionResult Get(intid)

{var name = "没有数据";var student =AlanDao.GetStudentByID(id);if (student != null)

{

name=student.Name;

}returnname;

}//根据id更新整条记录

public ActionResult Update(int id, string name, byte sex, intage)

{if (id <= 0)

{return "id 不能小于0";

}if (string.IsNullOrEmpty(name.Trim()))

{return "姓名不能为空";

}if (sex < 0 || sex > 2)

{return "性别数据有误";

}if (age <= 0)

{return "年龄数据有误";

}var student = newStudent()

{

ID=id,

Name=name,

Sex=sex,

Age=age

};var result =AlanDao.UpdateStudent(student);if(result)

{return "学生更新成功";

}else{return "学生更新失败";

}

}//根据id更新名称

public ActionResult UpdateName(int id, stringname)

{if (id <= 0)

{return "id 不能小于0";

}if (string.IsNullOrEmpty(name.Trim()))

{return "姓名不能为空";

}var result =AlanDao.UpdateNameByID(id, name);if(result)

{return "学生更新成功";

}else{return "学生更新失败";

}

}//根据id删掉记录

public ActionResult Delete(intid)

{if (id <= 0)

{return "id 不能小于0!";

}var result =AlanDao.DeleteStudentByID(id);if(result)

{return "学生删除成功";

}else{return "学生删除失败";

}

}

}

}

5、配置数据库连接串,注册数据库连接到容器,注册数据库操作类到容器,修改路由

在 appsettings.json 中配置数据库连接串 "AlanConnection": "server=localhost;port=3306;database=alan;uid=root;pwd=123456;CharSet=utf8" ,CharSet=utf8 是为了配合数据库 utf8 字符集,防止中文乱码:

{"ConnectionStrings": {"AlanConnection": "server=localhost;port=3306;database=alan;uid=root;pwd=123456;CharSet=utf8"}

}

修改 Startup.cs 类的 ConfigureServices() 方法,注册数据库连接,注册数据库操作类

注册数据库连接 services.AddDbContext(options => options.UseMySQL(Configuration.GetConnectionString("AlanConnection")));

UseMySql() 为使用 MySql 数据库,如果是 Sql Server 则使用 UseSqlServer()

注册数据库操作类 services.AddScoped();

public voidConfigureServices(IServiceCollection services)

{

services.AddDbContext(options => options.UseMySQL(Configuration.GetConnectionString("AlanConnection")));

services.AddScoped();

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

}

修改路由,添加默认路由,以  controller、action,MVC的路径方式访问而不是 restful api 路径方式访问

public voidConfigure(IApplicationBuilder app, IHostingEnvironment env)

{if(env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

app.UseMvc(routes=>{

routes.MapRoute(

name:"default",

template:"{controller=Home}/{action=Index}/{id?}");

});

}

到此代码编写已完成

三、运行测试数据库添、删、改、查

运行项目

e05e41039b66c1d651b5f0ec3afba115.png

dce06e592783541130b7793286100b84.png

db1a1fcd00ba5af14c7fec879f1d1396.png

cb7fd7d69ab0b3148c69765a972195d9.png

3b85d06b3660c26e599f1f4f8281ef60.png

b5ba67f1ee5d993bca8b35043cef13d2.png

bdd374fb5dcf0f3dd658da1b108a7629.png

921cd70cb52ff4bfa56b1970d74f8153.png

db2e328b64720df015b2f0934cd768b1.png

345e19f5f31b689707e77a656080378d.png

00b9141a059805e3b89e8491d34192e1.png

EF Core 添、删、改、查 MySql 数据库已完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值