asp.net 集成 EFCore mysql 数据库操作类
工程源码下载:GPS定位系统VUE版本源码下载
参考博客:C#环境下使用EF操作MySql
mysql数据安装教程:Windows环境下如何安装MySql
集成数据库类库
右键解决方案,新建一个名为DbEntity的类库项目



选择.net 6.0框架

新建好的类库,按下面格式,新建4个cs文件
“Tables/DbBase.cs”报表公共字段类
“Tables/GpsData.cs”Gps数据报表
“Tables/User.cs”用户信息表
“MyDbContext.cs”数据库初始化类,供外部调用

先添加依赖项
Microsoft.EntityFrameworkCore 7.0.0
MySql.EntityFrameworkCore 7.0.0
注意:两个库的版本要保持一致,并且版本不能太高,不然会有兼容问题,运行会报错

Tables/DbBase.cs 代码如下:
using System.ComponentModel.DataAnnotations;
namespace DbEntity.Tables
{
public class DbBase
{
[Key]
/// <summary>
/// id
/// </summary>
public string id { get; set; } = Guid.NewGuid().ToString("N");
/// <summary>
/// 添加时间
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime UpdateTime { get; set; } = DateTime.Now;
/// <summary>
/// 删除时间
/// </summary>
public DateTime? DeleteTime { get; set; }
/// <summary>
/// 删除状态
/// </summary>
public int DeleteFlag { get; set; }
}
}
Tables/GpsData.cs 代码如下:
using System.ComponentModel.DataAnnotations;
namespace DbEntity.Tables
{
public class GpsData : DbBase
{
/// <summary>
/// 用户识别编码,确保该坐标属于哪个用户的
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 设备号
/// </summary>
public int devid { get; set; }
/// <summary>
/// 账号/用户名
/// </summary>
public string Account { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 经度
/// </summary>
public decimal longitude { get; set; }
/// <summary>
/// 纬度
/// </summary>
public decimal latitude { get; set; }
}
}
Tables/User.cs 代码如下:
namespace DbEntity.Tables
{
public class User : DbBase
{
/// <summary>
/// 账号/用户名
/// </summary>
public string Account { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 用户昵称
/// </summary>
public string NickName { get; set; }
/// <summary>
/// 权限级别
/// <para>0:普通用户</para>
/// <para>1:管理员</para>
/// </summary>
public int Level { get; set; }
}
}
MyDbContext.cs 代码如下:
using DbEntity.Tables;
using Microsoft.EntityFrameworkCore;
namespace DbEntity
{
public class MyDbContext : DbContext
{
/// <summary>
/// 数据库的配置信息
/// </summary>
public static string config { get; set; }
/// <summary>
/// 用户信息表
/// </summary>
public DbSet<User> Tb_User { set; get; }
/// <summary>
/// GPS坐标数据
/// </summary>
public DbSet<GpsData> Tb_GpsData { set; get; }
/// <summary>
/// 连接数据库
/// </summary>
/// <param name="optionsBuilder"></param>
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL(config);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<GpsData>(entity =>
{
entity.Property(e => e.latitude).HasPrecision(18, 15);
entity.Property(e => e.longitude).HasPrecision(18, 15);
});
}
}
}
将DbEntity类库通过项目引用,引用到我们的WebApplicationApi工程中。

初始化数据库生成报表
在项目中新增一个名为ServerInit的cs文件,用于初始化我们一些必要的操作,如:初始化数据库、初始化队列、初始化TCP等。

我们这边,先初始化数据库,其他的初始化操作我们后来再一个个添加:
using DbEntity;
using Serilog;
namespace WebApplicationApi
{
public class ServerInit
{
public ServerInit(string sql, string tcp)
{
Log.Information(sql);
MyDbContext.config = sql;
DbInit();// 数据库初始化
}
/// <summary>
/// 启动数据库
/// </summary>
private void DbInit()
{
try
{
using (MyDbContext db = new MyDbContext())
{
db.Database.EnsureCreated();
}
}
catch (Exception e)
{
Log.Error(e.Message);
}
}
}
}
记得将前面Program.cs文件中屏蔽的 new ServerInit()操作打开:

然后再次运行我们的工程,程序就会自动生成我们的两张数据库表了,到这里,我们的EFcore就集成完成了。
