文章目录

  • 前言
  • 一、EF Core环境搭建
  • 二、基本的增删改查
    • 1.增加数据
    • 2.查询数据
    • 3.修改数据,删除数据

前言

EF Core是微软官方提供的ORM框架。EF Core不仅可以操作Microsoft SQL Server、MySQL、Oracle、PostgreSQL等数据库,而且可以操作Azure Cosmos DB等NoSQL数据库


一、EF Core环境搭建

前提条件:已经完整安装了Microsoft SQL Server

下面是一个实际操作EF Core的演示

  • 这是项目最终的目录,这里需要关注的就是.cs文件

  • 首先新建一个.NET Core控制台项目,然后在项目中创建Book实体类
    public class Book    {        public long Id { get; set; } //主键        public string Title { get; set; }//标题                public DateTime PubTime { get; set; }//发布日期        public double Price { get; set; }//单价        public string AuthorName { get; set; }//作者名字    }
  • 为项目安装NutGet包Microsoft.EntityFrameworkCore.SqlServer


安装命令

Install-Package Microsoft.EntityFrameworkCore.SqlServer
  • 创建实现了IEntityTypeConfiguration接口的实体类的配置类BookEntityConfig
    class BookConfig : IEntityTypeConfiguration<Book>    {        public void Configure(EntityTypeBuilder<Book> builder)        {            //表示实体类对应的数据库表的名字为T_Books            builder.ToTable("T_Books");            //这里没有配置各个属性子在数据库中列名和数据类型,EF Core将会默认把属性的名字作为列名,并且以属性的类型来推断数据库表中各列的数据类型        }    }

这个配置的作用是配置实体类和数据库表的对应关系,现在可能理解的并不深刻,后面就会明白很多了…

  • 创建一个继承自DbContext类的MyDbContext类(名字没有要求)
    class MyDbContext:DbContext    {        public DbSet<Book> Books { get; set; }                protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)        {            base.OnConfiguring(optionsBuilder);            optionsBuilder.UseSqlServer("Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;");        }        protected override void OnModelCreating(ModelBuilder modelBuilder)        {            base.OnModelCreating(modelBuilder);            //从当前程序集中加载所有的IEntityTypeConfiguration            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);        }    }

MyDbContext中的Books属性对应的数据库中的T_Books表,对Books的操作将会反映到数据库的T_Books表中。这种传承自DbContext的类叫做“上下文” 。
OnConfiguring方法用于对程序要连接的数据库进行配置,这里的配置

optionsBuilder.UseSqlServer("Server=.;Database=demo1;Trusted_Connection=True;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;");

是对本地SQL Server数据库的连接,名为demo1的数据库,如果连接其他的服务器中的数据库,需求去微软文档查看相应的连接字符串要求

  • 通过NuGet为项目安装Microsoft.EnityFrameworkCore.Tools包,这是为了使用EF Core生成数据库工具
Install-Package Microsoft.EnityFrameworkCore.Tools
  • 安装完之后我们执行Add-Migration命令会自动在项目的Migrations文件夹中生成C#代码

    这里后面的AddBirth是自行定义的,是一个名字而已
  • 最后执行Update-database命令那些在Migrations 文件夹中用来创建数据库表的代码才会被应用到数据库中

    这时候我们就可以来查看数据库中是否有对应的表了

二、基本的增删改查

1.增加数据

这里是在Program.cs中操作了

internal class Program    {        static async Task  Main(string[] args)        {            //创建逻辑上的数据库            using (MyDbContext myDbContext = new MyDbContext())            {                Book b1 = new Book                {                    AuthorName = "杨中科",                    Title = "零基础学C语音",                    Price = 59.8,                    PubTime = new DateTime(2019, 3, 1)                };                Book b2 = new Book                {                    AuthorName = "Robert Sedgewick",                    Title = "算法(第四版)",                    Price = 99,                    PubTime = new DateTime(2012, 10, 1)                };                Book b3 = new Book                {                    AuthorName = "吴军",                    Title = "数学之美",                    Price = 69,                    PubTime = new DateTime(2020, 5, 1)                };                Book b4 = new Book                {                    AuthorName = "杨中科",                    Title = "程序员的SQL金典",                    Price = 52,                    PubTime = new DateTime(2008, 9, 1)                };                Book b5 = new Book                {                    AuthorName = "吴军",                    Title = "文明之光",                    Price = 246,                    PubTime = new DateTime(2017, 3, 1)                };                //把对象加入逻辑上的表上面                myDbContext.Books.Add(b1);                myDbContext.Books.Add(b2);                myDbContext.Books.Add(b3);                myDbContext.Books.Add(b4);                myDbContext.Books.Add(b5);                //Update-Database                await myDbContext.SaveChangesAsync();            }        }    }

2.查询数据

IQueryable<Book> books = myDbContext.Books.Where(b => b.Price > 80);                foreach(var book in books)                {                    Console.WriteLine(book.Title);                }                var Book = myDbContext.Books.Single(b => b.Title == "零基础学C语言");                Console.WriteLine(Book.AuthorName);

查询就不需要 await myDbContext.SaveChangesAsync();了,在Main方法中执行即可

3.修改数据,删除数据

修改数据和删除数据,都分两步,第一步就是把数据查询出来,再就是对应操作

                //修改,要对数据进行修改,首先先查出来对应数据,再修改                var b = myDbContext.Books.Single(b => b.Title == "数学之美");                b.AuthorName = "junwu";                Dog dog = myDbContext.Dogs.Single(b => b.Id == 2);                myDbContext.Dogs.Remove(dog);                await myDbContext.SaveChangesAsync();