EF Core入门

2023-11-09


前言

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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF Core入门 的相关文章

随机推荐

  • 算法学习 day23

    669 修剪二叉搜索树 给你二叉搜索树的根节点 root 同时给定最小边界low 和最大边界 high 通过修剪二叉搜索树 使得所有节点的值在 low high 中 修剪树 不应该 改变保留在树中的元素的相对结构 即 如果没有被移除 原有的
  • 什么是包?导包的机制

    目录 小白眼中的包 Java包的定义 小白眼中的包 书包 钱包 水桶包都是包 根据盛放东西的区别而划分了不同的种类 盛书的叫书包 盛钱的叫钱包 盛日常出行必备品的桶装包叫水桶包 由此推导 包是盛纳物品的容器 Java包的定义 Java包指的
  • idea中配置连接多个数据库

    要在一个项目中连接如下两个数据库 yml中配置两个不同数据库 master datasource username root password url jdbc mysql localhost 3306 study useUnicode t
  • 基于OpenCV的视频道路车道检测

    基于OpenCV的视频道路车道检测 前言 综述 运行方法 车道检测的实现 路面图像二值化 基于透视变换提取车道区域 基于二次多项式拟合车道线 基于二次多项式拟合车道线 计算曲率半径与车辆的偏移距离 用车道区域标注原始图像 总结 前言 本篇博
  • [CVPR-17] Focal Loss for Dense Object Detection

    目录 摘要 Introduction Focal Loss Focal Loss Definition RetinaNet FPN Anchors 推理 Focal Loss 摘要 在训练密集detectors时 前景 背景极度不平衡是on
  • STL源码剖析(五)——关联式容器

    1 概览 所谓关联式容器 观念上类似于关联式数据库 每笔数据都有一个键值 key 和实值 value 当元素被插入到关联式容器中 容器内部结构 可能是红黑树和哈希表 便依照键值大小 以某种特定规则将这个元素放置在适当位置 关联式容器没有所谓
  • WEB开发技术期末复习

    The content comes from teacher courseware 第一章 信息系统与java企业级规范 一 信息系统的类型 1 单机系统 单机系统的特点 数据显示 数据处理 数据存储在同一台计算机上进行 数据显示一般为图形
  • Illegal mix of collations ((latin1_swedish_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for报错

    Illegal mix of collations latin1 swedish ci IMPLICIT and gbk chinese ci COERCIBLE for operation 查看了数据库发现是建表时设置表的编码为latin
  • Git的Flow工作流分享

    最近我们团队对日常开发规范和版本控制等工作进行了调整 为此对GitFlow工作流以及它的各类变种也进行了学习 在此记录一下 只有一个Master分支带来的问题 首先我们回顾一下我们在日常与团队的合作开发一个项目中会遇到与版本控制相关的场景
  • 一些测试案例

    一些测试案例 微信发红包测试用例 功能 可移植性 性能 界面 安全性 易用性 水杯的测试用例 功能 界面 性能 安全性 兼容性 易用性 可移植性 抗震性 电梯的测试用例 功能测试 界面测试 易用性测试 安全性测试 性能测试 兼容性测试 淘宝
  • 【机器学习与深度学习理论要点】25.什么是归一化,为什么要进行归一化?

    1 归一化是指归纳同意样本的统计分布性 归一化在0 1之间是统计概率分布 归一化在 1 1之间是统计的坐标分布 2 归一化处理的目的 为了后面数据处理方便 归一化可以避免一些不必要的数值问题 为了程序运行时收敛加快 统一量纲 样本数据的评价
  • STM32+L298N+PWM可调速小车(四驱)

    完整工程代码已放到百度网盘 链接如下 链接 https pan baidu com s 16zcnfLt2iYlrDdN N6tKbA 提取码 dn54 一 L298N电机驱动板 电源引脚 VCC 外接直流电源引脚 电压范围在5 35V之间
  • import torchvision时提示ImportError: DLL load failed: 找不到指定的模块。

    ImportError DLL load failed 找不到指定的模块 本人使用的是windows anaconda4 6 11 安装torchvision 时使用的是pip install no deps torchvision pip
  • 卷积神经网络(convolutional neural network, CNN)

    卷积神经网络 convolutional neural network CNN 卷积神经网络 convolutional neural network CNN 是一种专门用来处理具有类似网格结构的数据的神经网络 卷积网络是指那些至少在网络的
  • 游戏计算机推荐,2020十大游戏笔记本电脑排名(最新游戏本推荐)

    2020十大游戏笔记本电脑排名 最新游戏本推荐 1 玩家国度冰刃3S 9代i7 RTX2070 240Hz超高刷新率电竞屏 2 外星人Alienware M15 银 红双色可选 144Hz 1080P电竞屏 3 联想Y7000P 2019
  • 真题详解(语法分析输入记号流)-软件设计(八十)

    真题详解 求叶子结点数 软件设计 七十九 https blog csdn net ke1ying article details 130787349 spm 1001 2014 3001 5501 极限编程XP最佳实践 测试先行 按日甚至按
  • Sublime Text 构建系统 - 学习整理

    Sublime Text 提供构建系统 Build Systems 构建系统可以调用外部程序来处理文件 也就是说 它可以调用一些脚本 或是编译器 解释器等 因此 构建系统的一个的常用示例就是编译 在本文 我们将重点放在构建系统本身上 构建系
  • FreeRTOS学习笔记—基础知识

    文章目录 一 什么是RTOS 二 前后台系统 三 实时内核 可剥夺型内核 四 RTOS系统 五 FreeRTOS系统简介 六 FreeRTOS源码下载 一 什么是RTOS RTOS全称为 Real Time OS 就是实时操作系统 核心在于
  • java android 中AES加解密帮助类封装

    AES就不说 网上一搜一把 直接上代码 import javax crypto Cipher import javax crypto spec IvParameterSpec import javax crypto spec SecretK
  • EF Core入门

    文章目录 前言 一 EF Core环境搭建 二 基本的增删改查 1 增加数据 2 查询数据 3 修改数据 删除数据 前言 EF Core是微软官方提供的ORM框架 EF Core不仅可以操作Microsoft SQL Server MySQ