1、创建一个ConsoleApplication,程序集选择.NET5.;添加对应的依赖
2、添加对应的类Student、Course、Classes
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppEFCoreStudy { public class Student { public int id { get; set; } public string name { get; set; } public int age { get; set; } public int classID { get; set; } } }
public class Classes { public int ID { get; set; } public string Name { get; set; } public string Manager { get; set; } }
public class Course { public int CourseID { get; set; } public String CourseName { get; set; } }
3、添加数据库生成类SchoolContext,继承DbContext,指定数据库及需要生成类的命名空间
public class SchoolContext:DbContext { public DbSet<Student> Students { get; set; } public DbSet<Course> Courses { get; set; } //数据库连接字符串 private const string ConnectionString = "server=127.0.0.1;port=3306;database=efcorestudy;uid=root;pwd=123456;"; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //指定数据库 optionsBuilder.UseMySQL(ConnectionString); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //指定当前类所在程序集命名空间的实体做生成操作 modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly); } }
4、(非必须),此时已经能通过命令行去生成对应的数据库表了,但是完成指定生成表的名称、字段的相关设置(比如长度、外键等)等可以添加类的映射关系
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace ConsoleAppEFCoreStudy.ModelMaps { public class ClassesMap : IEntityTypeConfiguration<Classes> { public void Configure(EntityTypeBuilder<Classes> builder) { //对应表 builder.ToTable("Classes"); //设置主键 builder.HasKey(b => b.ID);//设置主键属性自增 builder.Property(b => b.ID).IsRequired().ValueGeneratedOnAdd(); builder.Property(b => b.Name).IsRequired().HasMaxLength(50); } } }
public void Configure(EntityTypeBuilder<Student> builder) { //对应表 builder.ToTable("Student"); //设置主键 builder.HasKey(b=>b.id); //设置对应班级(会在Student生成一个外键ClassesID(类名+主键)) builder.HasOne<Classes>(); //设置主键属性自增 builder.Property(b => b.id).IsRequired().ValueGeneratedOnAdd(); builder.Property(b => b.name).IsRequired().HasMaxLength(50); builder.Property(b => b.age).IsRequired(); builder.Property(b => b.classID).IsRequired(); }
5、以上所有的准备工作都做完了,就让我们开始初始化数据库吧。
选择工具-->NuGet包管理器--->程序包管理器控制台--->输入命令:Add-Migration init -->执行完后再输入命令: Update-Database
在项目里生成,在代码里生成对应的表
6、后续如果有字段更新或者添加新表,取另外一个名字,执行Add-Migration updateVersion1 -->执行完后再输入命令: Update-Database即可
注意:可能会造成数据库截断
查询中IQueryable 查询语句的方法