注意,本章节主要以ASP.NET Core 3.1版本作为博客的示例实例模板!(当然你也可以使用当前最新的.NET版本进行实操)。
若要在项目中使用EF Core操作MySQL数据库,需要安装相应的数据库驱动包。 本章教程主要使用 MySQL数据库,所以我们需要安装相关驱动包MySql.Data.EntityFrameworkCore。
Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.20
搜索: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)。
注意:属性大小写和数据库中的表字段保持一致,Id
属性成为此类对应的数据库表的主键列。 默认情况下,EF Core 将名为 Id
或 xxxID
的属性视为主键。 有关详细信息,请参阅密钥-EF Core | Microsoft Docs。
///
/// 学生信息模型
///
public class UserInfo
{
///
/// 学生编号
///
[Description("学生编号")]
public int? Id { get; set; }
///
/// 学生姓名
///
[Description("学生姓名")]
public string UserName { get; set; }
///
/// 学生性别
///
[Description("学生性别")]
public string Sex { get; set; }
///
/// 学生联系电话
///
[Description("学生联系电话")]
public string Phone { get; set; }
///
/// 学生描述
///
[Description("学生描述")]
public string Description { get; set; }
///
/// 学生爱好
///
[Description("学生爱好")]
public string Hobby { get; set; }
}
{
"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 options)
: base(options)
{
}
///
/// DbSet实体集属性对应数据库中的表(注意实体集名必须与表明一致)
///
public DbSet UserInfos { get; set; }
///
/// TODO:当数据库创建完成后, EF 创建一系列数据表,表名默认和 DbSet 属性名相同。集合属性的名称一般使用复数形式,但不同的开发人员的命名习惯可能不一样, /// 开发人员根据自己的情况确定是否使用复数形式。在定义 DbSet 属性的代码之后,添加下面代码,对DbContext指定单数的表名来覆盖默认的表名。
///
///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().ToTable("UserInfo");
}
}
}
// 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(options =>
options.UseMySQL(Configuration.GetConnectionString("MySqlConnection")));
services.AddControllersWithViews();
}
前往官网下载Layui相关样式和js包,下载地址:https://www.layui.com/
Layui弹出层插件layer.js(有很多地方需要用到弹窗),下载地址:https://layer.layui.com/
注意在这里主要展示的EF Core与数据库操作的部分代码,详细代码可下载实例源码查看。
///
/// 学生信息添加
///
///
///
public async Task 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;
}
}
///
/// 获取用户信息
///
/// 当前页码
/// 显示条数
/// 用户姓名
///
public async Task GetPageListData(int page = 1, int limit = 15, string userName = "")
{
try
{
List listData;
var totalCount = 0;
if (!string.IsNullOrWhiteSpace(userName))
{
listData = await _shoSchoolUserInfoContext.UserInfos.Where(x => x.UserName.Contains(userName)).OrderByDescending(x => x.Id).Skip((page - 1) * limit).Take(limit).ToListAsync();
totalCount = _shoSchoolUserInfoContext.UserInfos
.Count(x => x.UserName.Contains(userName));
}
else
{
listData = await _shoSchoolUserInfoContext.UserInfos.OrderByDescending(x => x.Id).Skip((page - 1) * limit).Take(limit).ToListAsync();
totalCount = _shoSchoolUserInfoContext.UserInfos.Count();
}
return new PageSearchModel()
{
ResultMsg = "success",
Code = 200,
TotalCount = totalCount,
DataList = listData
};
}
catch (Exception e)
{
return new PageSearchModel() { Code = 400, ResultMsg = e.Message };
}
}
///
/// 学生信息修改
///
///
///
public async Task Update(UserInfo userInfo)
{
try
{
_shoSchoolUserInfoContext.UserInfos.Update(userInfo);
await _shoSchoolUserInfoContext.SaveChangesAsync();
return true;
}
catch
{
return false;
}
}
///
/// 学生信息删除
///
///
///
public async Task 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;
}
}
https://github.com/YSGStudyHards/ASP.NET-Core-MVC-Layui-EF-Core-CRUD_Sample