.net core linq mysql_ASP.NET Core使用EF Core操作MySql数据库

本文详细介绍了如何在 ASP.NET Core 2.1 项目中使用 Entity Framework Core (EF Core) 连接并操作 MySql 数据库。步骤包括创建数据库、添加依赖项、定义实体和数据库上下文、实现 CRUD 操作,以及配置数据库连接字符串和路由。
摘要由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 脚本建库建表,脚本如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

CREATE DATABASE alan CHARACTER SET utf8 COLLATE utf8_general_ci

;

USE alan

;

CREATE TABLE student(

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

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

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

age INT NOT NULL DEFAULT 0

)

;

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

建库时加上 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")] 字段名等与表对应,代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

using System;

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations.Schema;

using System.Linq;

using System.Threading.Tasks;

namespace Snai.Mysql.Entities

{

[Table("student")]

public class Student

{

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

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

using Microsoft.EntityFrameworkCore;

using Snai.Mysql.Entities;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

namespace Snai.Mysql.DataAccess.Base

{

public class AlanContext:DbContext

{

public AlanContext(DbContextOptions options)

: base(options)

{ }

public DbSet Student { get; set; }

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

using Snai.Mysql.Entities;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

namespace Snai.Mysql.DataAccess.Interface

{

public interface IAlanDao

{

//插入数据

bool CreateStudent(Student student);

//取全部记录

IEnumerable GetStudents();

//取某id记录

Student GetStudentByID(int id);

//根据id更新整条记录

bool UpdateStudent(Student student);

//根据id更新名称

bool UpdateNameByID(int id, string name);

//根据id删掉记录

bool DeleteStudentByID(int id);

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

using Snai.Mysql.DataAccess.Base;

using Snai.Mysql.DataAccess.Interface;

using Snai.Mysql.Entities;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

namespace Snai.Mysql.DataAccess.Implement

{

public class AlanDao: IAlanDao

{

public AlanContext Context;

public AlanDao(AlanContext context)

{

Context = context;

}

//插入数据

public bool CreateStudent(Student student)

{

Context.Student.Add(student);

return Context.SaveChanges() > 0;

}

//取全部记录

public IEnumerable 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;

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using Microsoft.AspNetCore.Http;

using Microsoft.AspNetCore.Mvc;

using Snai.Mysql.DataAccess.Interface;

using Snai.Mysql.Entities;

namespace Snai.Mysql.Controllers

{

public class StudentController : ControllerBase

{

private IAlanDao AlanDao;

public StudentController(IAlanDao alanDao)

{

AlanDao = alanDao;

}

//插入数据

public ActionResult Create(string name, byte sex, int age)

{

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

{

return "姓名不能为空";

}

if (sex < 0 || sex > 2)

{

return "性别数据有误";

}

if (age <= 0)

{

return "年龄数据有误";

}

var student = new Student() {

Name = name,

Sex = sex,

Age = age

};

var result = AlanDao.CreateStudent(student);

if (result)

{

return "学生插入成功";

}

else

{

return "学生插入失败";

}

}

//取全部记录

public ActionResult Gets()

{

var names = "没有数据";

var students = AlanDao.GetStudents();

if (students != null)

{

names = "";

foreach (var s in students)

{

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

}

}

return names;

}

//取某id记录

public ActionResult Get(int id)

{

var name = "没有数据";

var student = AlanDao.GetStudentByID(id);

if (student != null)

{

name = student.Name;

}

return name;

}

//根据id更新整条记录

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

{

if (id <= 0)

{

return "id 不能小于0";

}

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

{

return "姓名不能为空";

}

if (sex < 0 || sex > 2)

{

return "性别数据有误";

}

if (age <= 0)

{

return "年龄数据有误";

}

var student = new Student()

{

ID = id,

Name = name,

Sex = sex,

Age = age

};

var result = AlanDao.UpdateStudent(student);

if (result)

{

return "学生更新成功";

}

else

{

return "学生更新失败";

}

}

//根据id更新名称

public ActionResult UpdateName(int id, string name)

{

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(int id)

{

if (id <= 0)

{

return "id 不能小于0!";

}

var result = AlanDao.DeleteStudentByID(id);

if (result)

{

return "学生删除成功";

}

else

{

return "学生删除失败";

}

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

public void ConfigureServices(IServiceCollection services)

{

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

services.AddScoped();

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

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

public void Configure(IApplicationBuilder app, IHostingEnvironment env)

{

if (env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

app.UseMvc(routes =>

{

routes.MapRoute(

name: "default",

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

});

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

到此代码编写已完成

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

运行项目

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 数据库已完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值