点击上方“Dotnet9”添加关注哦
上上个月写的一篇文章,今天有同事问我使用EF Core连接MySql和Oracel的问题,我把这篇文章直接甩给了他。
下面是正文:
这几天研究了EF Core对MySql、Oracle的操作,包括连接、简单查询等,操作是简单的,就是使用Nuget库折腾了会儿,这里作下记录,方便以后使用时查询。
行文目录导航
开头 EF Core之MySql使用的Nuget库 EF Core之Oracle使用的Nuget库 共享的实体定义 数据种子 查询,并简单使用EF Plus辅助查询 结尾
1. 开头
做些技术预言,方便后面使用,目的就是这么纯粹,新手可以看看本文,大佬可以略过…
2. EF Core之MySql使用的Nuget库
MySql作为开源的一个关系型数据库,使用的企业很多,下面是需要引入的Nuget库截图:

Design和Tools库不用多说,用于数据迁移的。 MySql.Data和Pomelo.EntityFrameworkCore.MySql是MySql驱动,版本尽量用截图所示,新库可能会有问题,爱折腾的可以尝试下。 Z.EntityFramework.Plus.EFCore是加强实体查询使用的。
3. EF Core之Oracle使用的Nuget库
Oracle也有免费版本,下面是Nuget库截图:

Design和Tools库迁移使用。 Oracle.EntityFrameworkCore是Oracle驱动,版本也尽量使用截图上的版本。
4. 共享的实体定义
简单的使用学生、课程、学生选课信息三个实体:
[Table("Student")]
public class Student
{
[Column("ID")]
public int ID { get; set; }
[Key, Column("Name"), MaxLength(25)]
public string Name { get; set; }
}
[Table("Course")]
public class Course
{
[Column("ID")]
public int ID { get; set; }
[Key, Column("Name"), MaxLength(25)]
public string Name { get; set; }
}
[Table("StudentCourse")]
public class StudentCourse
{
[Column("StuID")]
public int StuID { get; set; }
[Column("CourseID")]
public int CourseID { get; set; }
}复制
5. 数据种子
首先定义StudentDbContext,代码如下:
public class StudentDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySql(@"server=[服务器IP地址];user=[用户名];database=[数据库名];port=[端口,默认是3306];password=[数据库密码];SslMode=None");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasKey(t => t.ID);
modelBuilder.Entity<Course>()
.HasKey(t => t.ID);
modelBuilder.Entity<StudentCourse>()
.HasKey(t => new { t.StuID, t.CourseID });
base.OnModelCreating(modelBuilder);
modelBuilder.Seed();
}
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public DbSet<StudentCourse> StudentCourses { get; set; }
}复制
上面OnConfiguring中使用的MySql连接,Oracle修改如下:
optionsBuilder.UseOracle(@"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=[数据库IP地址])(PORT=[数据库端口,默认是1521]))(CONNECT_DATA=(SERVICE_NAME=[服务名,默认是orcl])));Persist Security Info=True;User ID=[用户名];Password=[密码]",
b => b.UseOracleSQLCompatibility([Oracle版本,11就写"11"]));复制
OnModelCreating方法中除了设置各实体对应数据表的主键外,还调用了数据种子扩展方法,方便程序测试之前写入测试数据,下面是扩展方法定义:
public static class ModelBuilderExtensions
{
public static void Seed(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>().HasData(
new Student { ID = 1, Name = "张三" },
new Student { ID = 2, Name = "李四" },
new Student { ID = 3, Name = "王五" });
modelBuilder.Entity<Course>().HasData(
new Course { ID = 1, Name = "语文" },
new Course { ID = 2, Name = "数学" },
new Course { ID = 3, Name = "英语" }
);
modelBuilder.Entity<StudentCourse>().HasData(
new StudentCourse { StuID = 1, CourseID = 1 },
new StudentCourse { StuID = 1, CourseID = 2 },
new StudentCourse { StuID = 2, CourseID = 3 },
new StudentCourse { StuID = 3, CourseID = 1 },
new StudentCourse { StuID = 3, CourseID = 3 }
);
}
}复制
6. 查询,并简单使用EF Plus辅助查询
简单的查询测试代码如下,不多说,直接上代码吧,我假如你看得懂,不懂加我微信、微信公众号、文末留言:
static void Main(string[] args)
{
using (var db = new StudentDbContext())
{
// EF Plus filter
db.Filter<Student>(s => s.Where(x => x.ID >= 2));
// 1、 EF Core join
var lst = from sc in db.StudentCourses
join s in db.Students on sc.StuID equals s.ID
join c in db.Courses on sc.CourseID equals c.ID
select new
{
StudentID = s.ID,
StudentName = s.Name,
CourseID = c.ID,
CourseName = c.Name
};
foreach (var sc in lst)
{
Console.WriteLine($"StudentID: {sc.StudentID}, Student Name: {sc.StudentName}, Course ID: {sc.CourseID}, Course Name: {sc.CourseName}");
}
}
Console.ReadKey();
}复制
7. 结尾
本文就是个简单记录,代码都经过测试,没有问题,使用VS 2019\.NET Core 3.1开发测试。

👇点击阅读原文
文章转载自Dotnet9,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
956次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
569次阅读
2025-04-25 15:30:58
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
565次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
496次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
465次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
458次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
456次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
443次阅读
2025-04-22 00:20:37
MySQL数据库当前和历史事务分析
听见风的声音
436次阅读
2025-04-01 08:47:17
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
434次阅读
2025-04-20 10:07:02