corelinqmysql_ASP.NETCore使⽤EFCore操作MySql数据
库
ASP.NET Core操作MySql数据库, 这样整套环境都可以布署在Linux上
使⽤微软的 Microsoft.EntityFrameworkCore(2.1.4) 和MySql出的 MySql.Data.EntityFrameworkCore(8.0.13)
软件版本
Asp Core:2.1
MySql:5.6
项⽬结构
Snai.Mysql 是 Asp core 2.0 Api⽹站,Database 下的是MySql建库建表脚本
项⽬实现
⼀、MySql 建库建表
使⽤ Database下的 mysql 建库 表 主键 索引.sql 脚本建库建表,脚本如下:
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 唯⼀索引
建库时加上 CHARACTER SET utf8 COLLATE utf8_general_ci 代码,设置数据库字符集为 utf8,配合程序的数据库连接串加
上 CharSet=utf8,防⽌中⽂保存时乱码
如果建库时不是utf8,就把字符集改为utf8
⼆、EF Core 连接操作 MySql 数据库
1、新建项⽬,添加EF Core 和 MySql驱动依赖项
新建 asp core api ⽹站程序,NuGet 添加依赖项 Microsoft.EntityFrameworkCore.Tools(2.1.4) 和
MySql.Data.EntityFrameworkCore(8.0.13) 包
2、添加实体类Student和数据库上下⽂
新建 Entities ⽬录,在,根据表及字段,在⽬录下新建 Student 实体类,在类上加 [Table("student")] 表名、属性上加[Column("id")]字段名等与表对应,代码如下:
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")]
mysql下载apppublic int Age { get; set; }
}
}
在根⽬录下加上 DataAccess ⽬录做为数据库操作⽬录,在该⽬录下加上 Base ⽬录做数据库上下⽂⽬录
在 Base ⽬录下新建 AlanContext 上下⽂类,继承 DbContext 类,通过构造函数注⼊数据库连接,添加 DbSet 实体属性,代码如下:
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; }
}
}
3、添、删、改、查 数据库记录
在 DataAccess ⽬录下新建 Interface ⽬录,⽤于保存数据库操作的接⼝,在该⽬录下新建 IAlanDao 接⼝,在接⼝⾥增加CreateStudent(),GetStudents(),GetStudentByID(),UpdateStudent(),UpdateNameByID(),DeleteStudentByID() 数据库添、删、改、查接⼝,代码如下:
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);
}
}
在 DataAccess ⽬录下新建 Implement ⽬录,⽤于保存数据库操作接⼝的实现,在该⽬录下新建 AlanDao 类,继承 IAlanDao 接⼝,实现接⼝⾥的数据库操作⽅法,在构造函数注⼊ AlanContext 数据库上下⽂,代码如下:
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)
{
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论