记一次EF Core连接MySql、Oracle
點(diǎn)擊上方“Dotnet9”添加關(guān)注哦
上上個(gè)月寫的一篇文章,今天有同事問我使用EF Core連接MySql和Oracel的問題,我把這篇文章直接甩給了他。
下面是正文:
這幾天研究了EF Core對(duì)MySql、Oracle的操作,包括連接、簡(jiǎn)單查詢等,操作是簡(jiǎn)單的,就是使用Nuget庫折騰了會(huì)兒,這里作下記錄,方便以后使用時(shí)查詢。
行文目錄導(dǎo)航
開頭
EF Core之MySql使用的Nuget庫
EF Core之Oracle使用的Nuget庫
共享的實(shí)體定義
數(shù)據(jù)種子
查詢,并簡(jiǎn)單使用EF Plus輔助查詢
結(jié)尾
1. 開頭
做些技術(shù)預(yù)言,方便后面使用,目的就是這么純粹,新手可以看看本文,大佬可以略過…
2. EF Core之MySql使用的Nuget庫
MySql作為開源的一個(gè)關(guān)系型數(shù)據(jù)庫,使用的企業(yè)很多,下面是需要引入的Nuget庫截圖:
MySql依賴包Design和Tools庫不用多說,用于數(shù)據(jù)遷移的。
MySql.Data和Pomelo.EntityFrameworkCore.MySql是MySql驅(qū)動(dòng),版本盡量用截圖所示,新庫可能會(huì)有問題,愛折騰的可以嘗試下。
Z.EntityFramework.Plus.EFCore是加強(qiáng)實(shí)體查詢使用的。
3. EF Core之Oracle使用的Nuget庫
Oracle也有免費(fèi)版本,下面是Nuget庫截圖:
Oracle依賴包Design和Tools庫遷移使用。
Oracle.EntityFrameworkCore是Oracle驅(qū)動(dòng),版本也盡量使用截圖上的版本。
4. 共享的實(shí)體定義
簡(jiǎn)單的使用學(xué)生、課程、學(xué)生選課信息三個(gè)實(shí)體:
[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. 數(shù)據(jù)種子
首先定義StudentDbContext,代碼如下:
public?class?StudentDbContext?:?DbContext {protected?override?void?OnConfiguring(DbContextOptionsBuilder?optionsBuilder){optionsBuilder.UseMySql(@"server=[服務(wù)器IP地址];user=[用戶名];database=[數(shù)據(jù)庫名];port=[端口,默認(rèn)是3306];password=[數(shù)據(jù)庫密碼];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=[數(shù)據(jù)庫IP地址])(PORT=[數(shù)據(jù)庫端口,默認(rèn)是1521]))(CONNECT_DATA=(SERVICE_NAME=[服務(wù)名,默認(rèn)是orcl])));Persist?Security?Info=True;User?ID=[用戶名];Password=[密碼]",b?=>?b.UseOracleSQLCompatibility([Oracle版本,11就寫"11"]));OnModelCreating方法中除了設(shè)置各實(shí)體對(duì)應(yīng)數(shù)據(jù)表的主鍵外,還調(diào)用了數(shù)據(jù)種子擴(kuò)展方法,方便程序測(cè)試之前寫入測(cè)試數(shù)據(jù),下面是擴(kuò)展方法定義:
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?=?"數(shù)學(xué)"?},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. 查詢,并簡(jiǎn)單使用EF Plus輔助查詢
簡(jiǎn)單的查詢測(cè)試代碼如下,不多說,直接上代碼吧,我假如你看得懂,不懂加我微信、微信公眾號(hào)、文末留言:
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. 結(jié)尾
本文就是個(gè)簡(jiǎn)單記錄,代碼都經(jīng)過測(cè)試,沒有問題,使用VS 2019\.NET?Core 3.1開發(fā)測(cè)試。
關(guān)注Dotnet9,分享更多好文如果本文對(duì)你有用,
不妨點(diǎn)個(gè)“在看”或者轉(zhuǎn)發(fā)朋友圈
????點(diǎn)擊閱讀原文
總結(jié)
以上是生活随笔為你收集整理的记一次EF Core连接MySql、Oracle的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinUI 3 试玩报告
- 下一篇: dotNET Core 3.X 使用 A