ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
前言:
本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例。关于ASP.NET Core MVC+EF操作MsSQL Server详情请参考官方文档(https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-mvc/?view=aspnetcore-3.1)。
示例实现功能预览:
博客实例源码下载地址:
https://github.com/YSGStudyHards/ASP.NET-Core-MVC-Layui-EF-Core-CRUD_Sample
一、创建ASP.NET Core Web应用程序:
注意,本章节主要以APS.NET Core 3.1版本作为博客的样式实例!


二、添加EF Core NuGet包:
若要在项目中使用EF Core操作MySQL数据库,需要安装相应的数据库驱动包。 本章教程主要使用 MySQL数据库,所以我们需要安装相关驱动包MySql.Data.EntityFrameworkCore。
安装方式:
点击工具=>NuGet包管理器=>程序包管理器控制台输入以下命令:
Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.20
点击工具=>NuGet包管理器=>管理解决方案的NuGet程序包:
搜索:MySql.Data.EntityFrameworkCore 点击安装。

三、创建对应数据库表的实体模型:
注意该篇博客使用的是手动模型优先的方式进行数据库表字段与模型属性映射,当然如果大家觉得这样子比较麻烦的话可以真正意义上的模型优先,直接创建模型在program.cs中配置创建对应模型的数据库逻辑代码即可无需手动创建数据库,可参考官网文档教程(https://docs.microsoft.com/zh-cn/aspnet/core/data/ef-rp/intro?view=aspnetcore-3.1&tabs=visual-studio#create-the-database)。
创建用户模型(UserInfo):
注意:属性大小写和数据库中的表字段保持一致,Id 属性成为此类对应的数据库表的主键列。 默认情况下,EF Core 将名为 Id 或 xxxID 的属性视为主键。 有关详细信息,请参阅 F Core - 密钥。
/// <summary>
/// 学生信息模型
/// </summary>
public class UserInfo
{
/// <summary>
/// 学生编号
/// </summary>
[Description("学生编号")]
public int? Id { get; set; } /// <summary>
/// 学生姓名
/// </summary>
[Description("学生姓名")]
public string UserName { get; set; } /// <summary>
/// 学生性别
/// </summary>
[Description("学生性别")]
public string Sex { get; set; } /// <summary>
/// 学生联系电话
/// </summary>
[Description("学生联系电话")]
public string Phone { get; set; } /// <summary>
/// 学生描述
/// </summary>
[Description("学生描述")]
public string Description { get; set; } /// <summary>
/// 学生爱好
/// </summary>
[Description("学生爱好")]
public string Hobby { get; set; }
}
四、将数据库连接字符串添加到 appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"MySqlConnection":"Data Source=127.0.0.1;User ID=root;Password=root;DataBase=SchoolUserInfo_db"
}
}
五、创建数据库上下文:
概述:
数据库上下文类是为给定数据模型协调 EF Core 功能的主类。 上下文派生自 Microsoft.EntityFrameworkCore.DbContext。 上下文指定数据模型中包含哪些实体。 在此项目中将数据库上下文类命名为 SchoolUserInfoContext。
创建:
using Microsoft.EntityFrameworkCore;
using Model; namespace Dal
{
public class SchoolUserInfoContext : DbContext
{
public SchoolUserInfoContext(DbContextOptions<SchoolUserInfoContext> options)
: base(options)
{
} /// <summary>
/// DbSet实体集属性对应数据库中的表(注意实体集名必须与表明一致)
/// </summary>
public DbSet<UserInfo> UserInfos { get; set; } /// <summary>
/// TODO:当数据库创建完成后, EF 创建一系列数据表,表名默认和 DbSet 属性名相同。 集合属性的名称一般使用复数形式,但不同的开发人员的命名习惯可能不一样,
/// 开发人员根据自己的情况确定是否使用复数形式。 在定义 DbSet 属性的代码之后,添加下面代码,对DbContext指定单数的表名来覆盖默认的表名。
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<UserInfo>().ToTable("UserInfo");
}
}
}
六、将上下文添加到 Startup.cs 中的依赖项注入:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
//注入EF Core数据库上下文服务
services.AddDbContext<SchoolUserInfoContext>(options =>
options.UseMySQL(Configuration.GetConnectionString("MySqlConnection"))); services.AddControllersWithViews();
}
七:引入Layui样式和js:
前往官网下载Layui相关样式和js包,下载地址:https://www.layui.com/
Layui弹出层插件layer.js(有很多地方需要用到弹窗),下载地址:https://layer.layui.com/
将相关文件存放到wwwroot文件下:

将相关文件引入默认布局页面中:

八、 ASP.NET Core MVC 和 EF Core实现MySQL CRUD功能:
注意在这里主要展示的EF Core与数据库操作的部分代码,详细代码可下载实例源码查看。
Create:
/// <summary>
/// 学生信息添加
/// </summary>
/// <param name="addUserInfo"></param>
/// <returns></returns>
public async Task<bool> Create(AddUserInfoViewModel addUserInfo)
{
try
{
var userInfo=new UserInfo()
{
UserName = addUserInfo.UserName,
Sex = addUserInfo.Sex,
Hobby = addUserInfo.Hobby,
Phone = addUserInfo.Phone,
Description = addUserInfo.Description
}; _shoSchoolUserInfoContext.UserInfos.Add(userInfo); await _shoSchoolUserInfoContext.SaveChangesAsync(); return true;
}
catch
{
return false;
}
}
Retrieve:
/// <summary>
/// 获取用户信息
/// </summary>
/// <param name="page">当前页码</param>
/// <param name="limit">显示条数</param>
/// <param name="userName">用户姓名</param>
/// <returns></returns>
public async Task<PageSearchModel> GetPageListData(int page = , int limit = , string userName = "")
{
try
{
List<UserInfo> listData;
var totalCount = ;
if (!string.IsNullOrWhiteSpace(userName))
{
listData = await _shoSchoolUserInfoContext.UserInfos.Where(x => x.UserName.Contains(userName)).OrderByDescending(x => x.Id).Skip((page - ) * limit).Take(limit).ToListAsync(); totalCount = _shoSchoolUserInfoContext.UserInfos
.Count(x => x.UserName.Contains(userName));
}
else
{
listData = await _shoSchoolUserInfoContext.UserInfos.OrderByDescending(x => x.Id).Skip((page - ) * limit).Take(limit).ToListAsync(); totalCount = _shoSchoolUserInfoContext.UserInfos.Count();
} return new PageSearchModel()
{
ResultMsg = "success",
Code = ,
TotalCount = totalCount,
DataList = listData
};
}
catch (Exception e)
{
return new PageSearchModel() { Code = , ResultMsg = e.Message };
}
}
Update:
/// <summary>
/// 学生信息修改
/// </summary>
/// <param name="userInfo"></param>
/// <returns></returns>
public async Task<bool> Update(UserInfo userInfo)
{ try
{
_shoSchoolUserInfoContext.UserInfos.Update(userInfo); await _shoSchoolUserInfoContext.SaveChangesAsync(); return true;
}
catch
{
return false;
}
}
Delete:
/// <summary>
/// 学生信息删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<bool> Delete(int? id)
{
try
{
var searchUserInfo = await _shoSchoolUserInfoContext.UserInfos.FindAsync(id); if (searchUserInfo == null)
{
return false;
} _shoSchoolUserInfoContext.UserInfos.Remove(searchUserInfo);
await _shoSchoolUserInfoContext.SaveChangesAsync(); return true;
}
catch
{
return false;
}
}
ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作的更多相关文章
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 10. 使用EF Core
支持的数据库:可以查看官方网站 https://docs.microsoft.com/en-us/ef/core/providers/ 安装了VS2017后会安装了LocalDB,验证localDB ...
- Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程
原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...
- .NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0简介
.NET Core 1.0.ASP.NET Core 1.0和EF Core 1.0简介 英文原文:Reintroducing .NET Core 1.0, ASP.NET Core 1.0, and ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- ASP.NET Core 开发 - Entity Framework (EF) Core
EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...
- 在Asp.Net Core 5 中使用EF Core连接MariaDB
升级到Asp.Net Core 5,使用EF Core连接MariaDB,使用的Nuget包Pomelo.EntityFrameworkCore.MySql也升级到了5.0.0-alpha.2,然后发 ...
- 【.Net Core 学习系列】-- EF Core 实践(Code First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project --> ...
- 【.Net Core 学习系列】-- EF Core实践(DB First)
一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging ...
随机推荐
- A Simple Problem with Integers 循环节 修改 平方 找规律 线段树
A Simple Problem with Integers 这个题目首先要打表找规律,这个对2018取模最后都会进入一个循环节,这个循环节的打表要用到龟兔赛跑. 龟兔赛跑算法 floyed判环算法 ...
- B. Heaters 思维题 贪心 区间覆盖
B. Heaters 这个题目虽然只有1500的分数,但是我还是感觉挺思维的,我今天没有写出来,然后看了一下题解 很少做这种区间覆盖的题目,也不是很擅长,接下来讲讲我看完题解后的思路. 题目大意是:给 ...
- C++11之STL多线程
STL库跨平台: VS2010不支持std::thread库,至少VS2012/2013及其以上可以: 一.库概要 (1)std::thread成员函数 thread(fun, args...); / ...
- 【Hadoop离线基础总结】HDFS详细介绍
HDFS详细介绍 分布式文件系统设计思路 概述 只有一台机器时的文件查找:hello.txt /export/servers/hello.txt 如果有多台机器时的文件查找:hello.txt nod ...
- InnoDB的ibd数据文件为什么比data_length+index_length+data_free的总和还要大?
问题描述: 同事在给jiradb做mysqldump时,发现dump出来的文件只有10MB左右,而ibd文件占用磁盘空间100MB左右. 最初,我们猜测可能是delete操作导致了大量的磁盘碎片,以及 ...
- CF-163A Substring and Subsequence 字符串DP
Substring and Subsequence 题意 给出两个字符串s,t,求出有多少对s的子串和t的子序列相等. 思路 类似于最长公共子序列的dp数组. dp[i][j]表示s中以i为结尾的子串 ...
- 用python爬了厦门人才网的.net岗位
为了看看.net的就业行情怎么样,用python爬取了厦门人才网.net岗位的信息,话不多说上代码,python没学多久,如果有什么不妥请指正 import requests from bs4 imp ...
- 如何搭建一个WEB服务器项目(六)—— 上传图片至服务器
上传图片(用户头像)至服务器 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出错误,分享宝贵经验.先谢谢 ...
- ruoyi-plus-server(一):引入Mybatis-Plus
背景:著名开源管理系统ruoyi-vue是基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统(https://gitee.c ...
- node中几个路径的梳理
大半夜睡不着... 今天用node写了返回客户端请求资源的http服务,确实发现了一些以前没注意到的问题. 第一个是在接收到请求的时候,解析完路径后,一定要判断请求的文件的后缀,以便选择对应的Cont ...