宁波方太集团网站建设,基础建设的网站有哪些内容,织梦网站建设视频,seo发包技术教程点击上方“Dotnet9”添加关注哦上上个月写的一篇文章#xff0c;今天有同事问我使用EF Core连接MySql和Oracel的问题#xff0c;我把这篇文章直接甩给了他。下面是正文#xff1a;这几天研究了EF Core对MySql、Oracle的操作#xff0c;包括连接、简单查询等#xff0c;操作… 点击上方“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库截图MySql依赖包Design和Tools库不用多说用于数据迁移的。MySql.Data和Pomelo.EntityFrameworkCore.MySql是MySql驱动版本尽量用截图所示新库可能会有问题爱折腾的可以尝试下。Z.EntityFramework.Plus.EFCore是加强实体查询使用的。3. EF Core之Oracle使用的Nuget库Oracle也有免费版本下面是Nuget库截图Oracle依赖包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[数据库密码];SslModeNone);}protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.EntityStudent().HasKey(t t.ID);modelBuilder.EntityCourse().HasKey(t t.ID);modelBuilder.EntityStudentCourse().HasKey(t new { t.StuID, t.CourseID });base.OnModelCreating(modelBuilder);modelBuilder.Seed();}public DbSetStudent Students { get; set; }public DbSetCourse Courses { get; set; }public DbSetStudentCourse StudentCourses { get; set; }}
上面OnConfiguring中使用的MySql连接Oracle修改如下optionsBuilder.UseOracle(Data Source(DESCRIPTION(ADDRESS(PROTOCOLTCP)(HOST[数据库IP地址])(PORT[数据库端口默认是1521]))(CONNECT_DATA(SERVICE_NAME[服务名默认是orcl])));Persist Security InfoTrue;User ID[用户名];Password[密码],b b.UseOracleSQLCompatibility([Oracle版本11就写11]));
OnModelCreating方法中除了设置各实体对应数据表的主键外还调用了数据种子扩展方法方便程序测试之前写入测试数据下面是扩展方法定义public static class ModelBuilderExtensions
{public static void Seed(this ModelBuilder modelBuilder){modelBuilder.EntityStudent().HasData(new Student { ID 1, Name 张三 },new Student { ID 2, Name 李四 },new Student { ID 3, Name 王五 });modelBuilder.EntityCourse().HasData(new Course { ID 1, Name 语文 },new Course { ID 2, Name 数学 },new Course { ID 3, Name 英语 });modelBuilder.EntityStudentCourse().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.FilterStudent(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分享更多好文如果本文对你有用不妨点个“在看”或者转发朋友圈????点击阅读原文