点击上方“Dotnet9”添加关注哦

上上个月写的一篇文章,今天有同事问我使用EF Core连接MySql和Oracel的问题,我把这篇文章直接甩给了他。

下面是正文:

这几天研究了EF Core对MySql、Oracle的操作,包括连接、简单查询等,操作是简单的,就是使用Nuget库折腾了会儿,这里作下记录,方便以后使用时查询。

行文目录导航

  1. 开头

  2. EF Core之MySql使用的Nuget库

  3. EF Core之Oracle使用的Nuget库

  4. 共享的实体定义

  5. 数据种子

  6. 查询,并简单使用EF Plus辅助查询

  7. 结尾

1. 开头

做些技术预言,方便后面使用,目的就是这么纯粹,新手可以看看本文,大佬可以略过…

2. EF Core之MySql使用的Nuget库

MySql作为开源的一个关系型数据库,使用的企业很多,下面是需要引入的Nuget库截图:

MySql依赖包
  1. Design和Tools库不用多说,用于数据迁移的。

  2. MySql.Data和Pomelo.EntityFrameworkCore.MySql是MySql驱动,版本尽量用截图所示,新库可能会有问题,爱折腾的可以尝试下。

  3. Z.EntityFramework.Plus.EFCore是加强实体查询使用的。

3. EF Core之Oracle使用的Nuget库

Oracle也有免费版本,下面是Nuget库截图:

Oracle依赖包
  1. Design和Tools库迁移使用。

  2. 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 filterdb.Filter<Student>(s => s.Where(x => x.ID >= 2));// 1、 EF Core joinvar lst = from sc in db.StudentCoursesjoin s in db.Students on sc.StuID equals s.IDjoin c in db.Courses on sc.CourseID equals c.IDselect 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,分享更多好文

如果本文对你有用,

不妨点个“在看”或者转发朋友圈

????点击阅读原文

记一次EF Core连接MySql、Oracle相关推荐

  1. 0配置EF连接MySql数据库_第八节:EF Core连接MySql数据库

    一. 前提 1.安装EF Core连接MySQL的驱动,这里有两类: (1).Oracle官方出品:MySql.Data.EntityFrameworkCore (版本:8.0.17) (2).其他第 ...

  2. 第八节:EF Core连接MySql和Sqlite数据库

    ... 转载于:https://www.cnblogs.com/yaopengfei/p/11507557.html

  3. ef core连接Oracle数据库

    好久没写博客了,今天研究了下EF core连接Oracle,踩了几个坑,现在总结一下. 首先新建个应用程序,我这就就选择Asp.net core web 应用程序了. 然后输入项目名称,选择模板就好了 ...

  4. EF Core For MySql查询中使用DateTime.Now作为查询条件的一个小问题

    背景 最近一直忙于手上澳洲线上项目的整体迁移和升级的准备工作,导致博客和公众号停更.本周终于艰难的完成了任务,借此机会,总结一下项目中遇到的一些问题. EF Core 一直是我们团队中中小型项目常用的 ...

  5. centos sqldeveloper 连接mysql,Oracle SQL Developer 连接 Mysql 等数据库

    Oracle SQL Developer 个人感觉是比较好用的工具,因此除了连接oracle之外,还可以连接其他的数据库,如:MySQL,Access等.但是,它默认情况下只能连接Oracle和Acc ...

  6. sqlserver连接字符串_10分钟使用EF Core连接MSSQL数据库

    (给DotNet加星标,提升.Net技能) 转自:Ron.liang cnblogs.com/viter/p/10243577.html 前言 在 .NET Core 2.2中Microsoft.As ...

  7. c odp.net连oracle,.NET Core 使用ODP.NET Core连接操作Oracle数据库

    1、使用必要条件 1) 安装Microsoft Visual Studio 2017或更高版本. 2) 安装Oracle Database 12c或更高版本. 2、ODP.NET Core安装配置 在 ...

  8. C#/.NET 在EF中连接mySql

    做了一次更新,以后面更新的内容为主 我们在开发有关数据库相关的程序的时候,通常会遇到选择数据库的连接方式问题,有些人选ADO.NET,有些人选EF,更好的就是两者同时选择. 我在写现在这个项目的时候, ...

  9. ASP.NET Core MVC+EF Core从开发到部署

    笔记本电脑装了双系统(Windows 10和Ubuntu16.04)快半年了,平时有时间就喜欢切换到Ubuntu系统下耍耍Linux,熟悉熟悉Linux命令.Shell脚本以及Linux下的各种应用的 ...

最新文章

  1. python入门教程非常详细-Python编程入门教程:从入门到高级,非常详细
  2. 问问大家作为大数据总监,刚刚到一家新单位,怎么开展工作比较好?
  3. JS-内置对象内置构造函数事件-拖拽轮播图无缝滚动
  4. ENtEntityFranework 的简单应用(一)
  5. 查看linux上卸载mysql数据库_linux卸载mysql数据库
  6. oracle回滚断查询,Oracle回滚段使用查询代码详解
  7. 几种建模工具简介(SPSS,SAS,Stata,R,Matlab,Amos,Lisrel)
  8. SCSI代码分析(0)SCSI层框架
  9. html留言页面设计,html的留言板制作(js)
  10. 如何快速获得Q币(python简单实现)
  11. IOS开发之——音乐播放器-播放器页面(05)
  12. linux无线网卡驱动分析,基于Linux的无线网卡驱动程序
  13. 红外数据集 | 收集OTCBVS、KAIST、FLIR红外图像数据
  14. (40)STM32——OV2640摄像头实验
  15. 华为设备配置OSPF负载分担
  16. ar vr mr 计算机技术,VR技术是什么?AR、MR又是什么?
  17. php类和对象教程,php类和对象
  18. IBM Guardium
  19. java游戏三国神兽,三国神兽攻略游戏下载_三国神兽攻略手游安卓版下载-我的世界中文网...
  20. uboot代码详细分析.pdf

热门文章

  1. Html、Css-----当有文字和图片的时候,需要文字和图片居中,怎么实现?不想文字换行怎么设置...
  2. 网络传输中的反码求和算法
  3. 精品教程--Android实战系列源码与教程
  4. Android一些知识总结
  5. prototype.js 和jquery-1.6.2.js冲突问题解决方法
  6. 小小一招解决“INSERT EXEC 语句不能嵌套”的问题
  7. outlook日历不显示_如何在Outlook Online中突出显示不同的日历
  8. 如何在Xbox One或PlayStation 4上为Skyrim特别版安装Mods
  9. 网站跳出率的相关要点介绍
  10. 本文主要总结关于mysql的优化(将会持续更新)