目的:使用EFCore 的CodeFirst实现简单的增删改查,只注重流程搭建,不涉及到比较复杂的配置和应用等
Nuget包安装:
Micosoft.EntityFrameworkCore:EFCore基础包
Micosoft.EntityFrameworkCore.SqlServer:该系列文章使用SQLServer数据库,因此需要引用这个包,如果是其它数据库,查找对应的包安装即可
Micosoft.EntityFrameworkCore.Tool:工具包,迁移数据库需要用到的包
第1步:创建实体类Student
public class Student { public long Id { get; set; } /// <summary> /// 学号 /// </summary> public string Num { get; set; } /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// 年龄 /// </summary> public int Age { get; set; } }
第2步:创建实体类对应的配置类,后续会解析配置类的作用,目前只需要照做就行
配置类需要继承泛型接口IEntityTypeConfiguration<T>,T对应需要配置的实体,实现Configure方法
public class StudentConfig : IEntityTypeConfiguration<Student> { public void Configure(EntityTypeBuilder<Student> builder) { } }
第3步:创建继承于DBContext的类,该类主要是配置DBSet<T>类型属性,每一个DBSet<T>对应数据库中的一个表格
还有就是通过重写OnConfiguring方法进行数据库的连接操作
重写OnModelCreating方法进行实体类的配置
public class MyDbContext:DbContext { public DbSet<Student> Students { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //MyDemo1是要创建和连接的数据库名称,sa、fs888是我SQLServer的用户名和密码,需要根据自己配置进行修改 optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=MyDemo1;User ID=sa;Password=fs888;Encrypt=False;"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly); } }
第4步:进行数据库的迁移,在VS中的”程序包管理控制台“进行,迁移有很多指令,这里只讲解两个指令
add-migration xxx:生成一次迁移(可以是数据库的初次创建或者表的更新 ),名字需要有意义并且合法,方便后面回滚,执行后会在项目的Migrations文件夹中生成操作数据库的代码
执行完 add-migration xxx指令后,项目中会自动生成迁移文件夹Migrations,一般不要手动去删除,后续回滚可能需要
生成迁移文件后,这是数据库中还没有生成对应的数据库文件,需要执行下面指令,
Update-database,执行成功后表就完成迁移,查看数据库可以看到变化
执行完Update-database,查看数据库,可以看到”MyDemo1“数据库已经建成,数据库中有一个”Students“表,是因为第三步中我们配置了
public DbSet<Student> Students { get; set; }
至此,最简单的使用EFCore通过代码生成数据库就完成了,下面我们在做一些简单的增删改查
往Students中增加两条数据:
static void Main(string[] args) { //因为DBContext继承于IDispose,所以使用Using,防止内存泄漏 //对数据库的操作相当于对DBContext的操作 using (MyDbContext db = new MyDbContext()) { //在Students表中增加两条数据,不能显示设置Id,因为Id在数据库中默认是自增的 db.Students.Add(new Student { Name = "Devi", Age = 18, Num = "00000016" }); db.Students.Add(new Student { Name = "Sam", Age = 28, Num = "000000156" }); //保存数据库修改 db.SaveChanges(); } }
查看数据库中Students表格,增加了两条数据:
删除:
static void Main(string[] args) { //因为DBContext继承于IDispose,所以使用Using,防止内存泄漏 //对数据库的操作相当于对DBContext的操作 using (MyDbContext db = new MyDbContext()) { //在Students表中增加两条数据,不能显示设置Id,因为Id在数据库中默认是自增的 //db.Students.Add(new Student { Name = "Devi", Age = 18, Num = "00000016" }); //db.Students.Add(new Student { Name = "Sam", Age = 28, Num = "000000156" }); //删除Students中的Name="Devi"的数据 var s1 = db.Students.Where(x => x.Name == "Devi").First(); db.Students.Remove(s1); //保存数据库修改 db.SaveChanges(); } }
删除后查看数据库中Students表格,发现剩下一条数据:
改:
static void Main(string[] args) { //因为DBContext继承于IDispose,所以使用Using,防止内存泄漏 //对数据库的操作相当于对DBContext的操作 using (MyDbContext db = new MyDbContext()) { //在Students表中增加两条数据,不能显示设置Id,因为Id在数据库中默认是自增的 //db.Students.Add(new Student { Name = "Devi", Age = 18, Num = "00000016" }); //db.Students.Add(new Student { Name = "Sam", Age = 28, Num = "000000156" }); //删除Students中的Name="Devi"的数据 // var s1 = db.Students.Where(x => x.Name == "Devi").First(); //db.Students.Remove(s1); //修改Students表中Name="Sam"的数据,把Age改为38 var s2 = db.Students.Where(x => x.Name == "Sam").First(); s2.Age = 38; //保存数据库修改 db.SaveChanges(); } }
修改后数据库的Students表格如下:
查询:
static void Main(string[] args) { //因为DBContext继承于IDispose,所以使用Using,防止内存泄漏 //对数据库的操作相当于对DBContext的操作 using (MyDbContext db = new MyDbContext()) { //在Students表中增加两条数据,不能显示设置Id,因为Id在数据库中默认是自增的 //db.Students.Add(new Student { Name = "Devi", Age = 18, Num = "00000016" }); //db.Students.Add(new Student { Name = "Sam", Age = 28, Num = "000000156" }); //删除Students中的Name="Devi"的数据 // var s1 = db.Students.Where(x => x.Name == "Devi").First(); //db.Students.Remove(s1); //修改Students表中Name="Sam"的数据,把Age改为38 //var s2 = db.Students.Where(x => x.Name == "Sam").First(); //s2.Age = 38; //查询Students表格中所有的行数 var s3 = db.Students; foreach (var student in s3) { Console.WriteLine($"Id;{student.Id} Name:{student.Name} Age:{student.Age} Num:{student.Num}"); } //保存数据库修改 db.SaveChanges(); } }
结果:1条数据
注意:对数据库的所有修改,只有执行了SaveChanges()之后,才会实际更新到数据库表格中
标签:CodeFirst,Name,Students,数据库,db,EFCore,new,Age From: https://www.cnblogs.com/luohualiushui1173/p/17901726.html