.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 ''; 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(); entity.Property(e => e.LinkUrl).HasMaxLength(); entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(); entity.Property(e => e.Title)
.IsRequired()
.HasMaxLength();
}); modelBuilder.Entity<Role>(entity =>
{
entity.Property(e => e.RoleId)
.HasColumnName("RoleID")
.HasColumnType("int(11)"); entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(); 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)");
});
}
}
更多:
.NetCore中EFCore for MySql整理(二)
.NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql的更多相关文章
- .NetCore中EFCore的使用整理(三)-关联表操作
一.查询关联表数据 StudyAboard_TestContext _context = new StudyAboard_TestContext(); CrmRole role = _context. ...
- .NetCore中EFCore的使用整理(二)-关联表查询
EF常用处理关联加载的方式有3中:延迟加载(Lazy Loading).贪婪加载 (Eager Loading)以及显示加载. 一.EF Core 1.1 1.当前的版本,还不支持延迟加载(Lazy ...
- .NetCore中EFCore的使用整理
EntirtyFramework框架是一个轻量级的可扩展版本的流行实体框架数据访问技术. 其中的.NetCore版本对应EntityFrameworkCore Git源代码地址:https://git ...
- .NetCore中EFCore for MySql整理(二)
一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...
- An item with the same key has already been added. Key: Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal.MySqlOptionsExtension
An item with the same key has already been added. Key: Pomelo.EntityFrameworkCore.MySql.Infrastructu ...
- .NetCore中EFCore for MySql整理
一.MySql官方提供了Ef Core对MySql的支持,但现在还处于预览版 Install-Package MySql.Data.EntityFrameworkCore -Pre Install-P ...
- python使用mysql的三个模块:mysql.connector、sqlalchemy、MySQLdb
在python中使用mysql其实很简单,只要先安装对应的模块即可,那么对应的模块都有什么?官方也没指定也没提供,pcat就推荐自己遇到的3个模块:mysql.connector.sqlalchemy ...
- NetCore 中 EFcore的DbFirst和CodeFirst混合 使用注意
NetCore 最近很火热.笔者想把自己以前的旧项目迁移到NetCore平台. 先用EFcore的DBFirst根据数据库创建实体类,然后加入数据库版本控制功能也就是EFcore的CodeFirst部 ...
- Asp.Net Core中Json序列化处理整理
一.Asp.Net Core中的Json序列化处理使用的是Newtonsoft.Json,更多参考:C# Newtonsoft.Json JsonSerializerSettings配置序列化操作,C ...
随机推荐
- vue2的缓存问题(非原创)
keep-alive是vue内置的一个组件,可以使被它包含的组件处于保留状态,或避免被重新渲染. 用法: 运行结果描述: input输入框内,路由切换输入框内部的内容不会发生改变. 常见的用法:(下图 ...
- iOS学习笔记之异步图片下载
写在前面 在iOS开发中,无论是在UITableView还是在UICollectionView中,通过网络获取图片设置到cell上是较为常见的需求.尽管有很多现存的第三方库可以将下载和缓存功能都封装好 ...
- unittest中更高效的执行测试用例一个类只需要打开一次浏览器
示例代码 baidu.py # _*_ coding:utf-8 _*_ import csv,unittest #导入csv模块 from time import sleep from seleni ...
- python 全栈开发,Day58(bootstrap组件,bootstrap JavaScript 插件,后台模板,图表插件,jQuery插件库,Animate.css,swiper,运行vue项目)
一.bootstrap组件 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 组件和插件的区别? 插件:一个功能,比如js文件 组件:html css js 组件包含插件 面 ...
- html中hr的各种样式使用
第一种: <hr style=" height:2px;border:none;border-top:2px dotted #185598;" /> height:2p ...
- HTML5——Data Url生成
HTML5——Data Url生成 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...
- 阿里巴巴的26款超神Java开源项目
目录 1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba 2. JDBC 连接池.监控组件 Druid 3. Java 的 JSON 处理器 fastjson 4. 服务 ...
- POJ 2376 Cleaning Shifts【贪心】
POJ 2376 题意: 给出一给大区间和n各小区间,问最少可以用多少小区间覆盖整个大区间. 分析: 贪心法.设t为当前所有已确定区间的最右端,那我们可以每次都取所有可选的小区间(左端点<=t+ ...
- 【AtCoder】全国統一プログラミング王決定戦予選/NIKKEI Programming Contest 2019
感觉最近好颓,以后不能这么颓了,要省选了,争取省选之前再板刷一面ATC??? A - Subscribers 简单容斥 #include <bits/stdc++.h> #define f ...
- Codeforces Round #359 (Div. 2) D - Kay and Snowflake
D - Kay and Snowflake 题目大意:给你一棵数q个询问,每个询问给你一个顶点编号,要你求以这个点为根的子树的重心是哪个节点. 定义:一棵树的顶点数为n,将重心去掉了以后所有子树的顶点 ...