.NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql
一、Pomelo.EntityFrameworkCore.MySql简介
Git源代码地址:https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
注:这是第三方的 EF Core 的ORM框架,支持Synac I/O访问操作MySql数据,不是MySql官方的数据驱动。
1.本框架支持Code First 和Server First
问题:Server First 生成代码没有附带主外键关联。
二、Server First方式使用示例
1.创建.Net Core 控制台项目
2.安装Pomelo.EntityFrameworkCore.MySql
使用命令:
Install-Package Pomelo.EntityFrameworkCore.MySql
或者在包管理工具中搜索安装
创建数据库角色-菜单命令:

-- 创建角色&菜单简单逻辑表 create database RoleMenu; grant all on *.* to 'userone'@'localhost' identified by '123'; use RoleMenu; -- drop table Role_Menu,Role,Menu; -- 创建角色表 create table Role( RoleID int not null auto_increment, Name nvarchar(50) not null, SortValue int not null, primary key(RoleID) ); -- 创建菜单表 create table Menu( MenuID int not null auto_increment, Name nvarchar(50) not null, Title nvarchar(100) not null, LinkUrl varchar(200) null, Icon varchar(100) null, primary key(MenuID) ); -- 创建角色-菜单表 create table Role_Menu( ID int not null auto_increment, RoleID int not null, MenuID int not null, primary key(ID), foreign key(RoleID) references Role(RoleID) on delete cascade, foreign key(MenuID) references Menu(MenuID) on delete no action ); -- 添加测试数据 insert Role(Name,SortValue) values('系统管理员',1); insert Role(Name,SortValue) values('服务中心',2); -- 添加菜单数据 insert Menu(Name,Title) values('个人信息','个人信息管理'); insert Menu(Name,Title) values('修改密码','修改登录密码&二级密码'); -- 添加关联 insert Role_Menu(RoleID,MenuID) values(1,1); insert Role_Menu(RoleID,MenuID) values(1,2); insert Role_Menu(RoleID,MenuID) values(2,1); insert Role_Menu(RoleID,MenuID) values(2,2);
使用PM命令,链接数据库生成model层和上下文:
Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=Md5Data;uid=xxx;pwd=xxx;Character Set=utf8;" MySql.Data.EntityFrameworkCore -OutputDir models2
生成代码结果:
public partial class Role { public int RoleId { get; set; } public string Name { get; set; } public int SortValue { get; set; } } public partial class Menu { public int MenuId { get; set; } public string Name { get; set; } public string Title { get; set; } public string LinkUrl { get; set; } public string Icon { get; set; } } public partial class RoleMenu { public int Id { get; set; } public int RoleId { get; set; } public int MenuId { get; set; } } public partial class RoleMenuContext : DbContext { public virtual DbSet<Menu> Menu { get; set; } public virtual DbSet<Role> Role { get; set; } public virtual DbSet<RoleMenu> RoleMenu { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. optionsBuilder.UseMySql("Server=127.0.0.1;port=3306;Database=RoleMenu;uid=userone;pwd=123;Character Set=utf8;"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Menu>(entity => { entity.Property(e => e.MenuId) .HasColumnName("MenuID") .HasColumnType("int(11)"); entity.Property(e => e.Icon).HasMaxLength(100); entity.Property(e => e.LinkUrl).HasMaxLength(200); entity.Property(e => e.Name) .IsRequired() .HasMaxLength(50); entity.Property(e => e.Title) .IsRequired() .HasMaxLength(100); }); modelBuilder.Entity<Role>(entity => { entity.Property(e => e.RoleId) .HasColumnName("RoleID") .HasColumnType("int(11)"); entity.Property(e => e.Name) .IsRequired() .HasMaxLength(50); entity.Property(e => e.SortValue).HasColumnType("int(11)"); }); modelBuilder.Entity<RoleMenu>(entity => { entity.ToTable("Role_Menu"); entity.HasIndex(e => e.MenuId) .HasName("MenuID"); entity.HasIndex(e => e.RoleId) .HasName("RoleID"); entity.Property(e => e.Id) .HasColumnName("ID") .HasColumnType("int(11)"); entity.Property(e => e.MenuId) .HasColumnName("MenuID") .HasColumnType("int(11)"); entity.Property(e => e.RoleId) .HasColumnName("RoleID") .HasColumnType("int(11)"); }); } }
更多:
分类:
Asp.Net Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2017-01-15 C#使用FFmpeg 将视频格式转换成Gif图片示例
2015-01-15 Canvas简介
2014-01-15 CSS中表示cellpadding和cellspacing的方法
2014-01-15 网站项目:让一般处理文件.ashx的代码有折叠功能(#region)