EF Core入门

news2024/11/18 19:59:34

文章目录

  • 前言
  • 一、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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【让你惊呼的“神器”,ChatGPT inside】

让你惊呼的“神器”&#xff0c;ChatGPT inside ChatGPT 的横空出世&#xff0c;已经搅动了整个科技圈。而它给自然语言处理领域带来的革命性变革&#xff0c;也为很多初创公司和开发者打开了新世界的大门。 在过去&#xff0c;自然语言处理技术通常只被各大科技巨头藏私&…

玩机搞机----root面具的安装 更新 隐藏root 德尔塔面具等等综合解析

目前的机型都是root面具&#xff0c;今天的帖子主要分析下面具的一些使用常识。一般面具如何使用一参考我前面的帖子。基本步骤都是解锁bl---修补boot---刷入boot----安装面具apk。但目前很多app会检测系统root&#xff0c;对于有些敏感类软件例如银行等等然后会检测当前系统ro…

C/C++每日一练(20230423)

目录 1. 多组输入求和 ※ 2. 螺旋矩阵 II &#x1f31f;&#x1f31f; 3. 路径交叉 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 多组…

用golang实现traceroute

Traceroute 概念 traceroute是一种网络诊断工具&#xff0c;通过traceroute可以诊断出本机到目的地IP之间的路由情况&#xff0c;例如路由跳数、延迟、是否可达等信息。该工具在linux环境下的命令是traceroute或者tracepath&#xff0c;在windows下命令是tracert。 工作原理…

动态路由四大天王:OSPF、RIP、IS-IS、BGP,收藏这篇文章足以!

在计算机网络中&#xff0c;OSPF、RIP、IS-IS、BGP 都是常见的路由协议。它们分别具有不同的特点和适用场景。本文将对这四种路由协议进行对比&#xff0c;以帮助读者更好地了解它们的优缺点和适用范围。 OSPF OSPF&#xff08;Open Shortest Path First&#xff09;是一种链路…

中文编程最高境界,不用编程,会用excel就会用,香不香?

一直以来&#xff0c;关于中文编程的争议从未消停过。现如今&#xff0c;中文编程发展又是如何&#xff1f; ★为了实现中文编程&#xff0c;从未停下脚步 我们知道&#xff0c;中国人一直以来为了实现中文编程付出了不懈的努力&#xff0c;前前后后研发了几十种中文编程语言。…

JavaSE补充 | 了解数据结构与常用集合的源码分析

目录 一&#xff1a;数据结构 1. 数据结构剖析 1.1 研究对象一&#xff1a;数据间逻辑关系 1.2 研究对象二&#xff1a;数据的存储结构&#xff08;或物理结构&#xff09; 1.3 研究对象三&#xff1a;运算结构 2. 常见存储结构之&#xff1a;数组 3. 常见存储结构之&am…

奇葩的new Date()

大家平时在开发的时候有没被new Date()折磨过&#xff1f;就是它的诸多怪异的设定让你每每用的时候&#xff0c;都可能不小心踩坑。造成程序意外出错&#xff0c;却一下子找不到问题出处&#xff0c;那叫一个烦透了…… 下面&#xff0c;我就列举它的“四宗罪”及应用思考 可恶…

微前端运行时

目录 微前端运行时基于 SPA 的微前端架构应用生命周期 微前端运行时 谈到微前端绕不开的话题就是为什么不适用 iframe 作为承载微前端子应用的容器&#xff0c;其实从浏览器原生的方案来说&#xff0c;iframe 不从体验角度上来看几乎是最可靠的微前端方案了&#xff0c;主应用…

关于FPV图传系统时延讨论

关于FPV图传系统时延讨论 1. 源由2. 时延测试方法3. 时延测试资料4. 关于模拟图传5. 关于FPV时延感受5.1 静态时延5.2 动态时延 6. 参考资料7. 附录 DJI 图传系统 1. 源由 视频图传系统最重要的几个指标&#xff1a; 分辨率视角帧率时延传输距离 目前高清图传主要规则&#…

【Cartopy基础入门】如何丝滑的加载Geojson数据

原文作者&#xff1a;我辈李想 版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上原文超链接、作者信息和本声明。 Cartopy基础入门 【Cartopy基础入门】Cartopy的安装 【Cartopy基础入门】如何丝滑的加载Geojson数据 文章目录 Cartopy基础入门一、Geojson数据来源二…

C语言 非本地跳转 实现native层TryCatch

前言 最近研究native hook的技术&#xff0c;了解到了这个非本地跳转&#xff0c;本文就是介绍他&#xff0c;对于解决native crash非常有用。 非本地跳转介绍 C语言的本地跳转是指goto、break、continue等语句&#xff0c;但是这个语句最大局限就是只能实现函数内部的跳转。…

Day3 自学Pytorch 数据集 torchvision.transforms类&torchvision.datasets.ImageFolder类

1.torchvision.transforms类 可调用的函数列表https://pytorch.org/vision/stable/transforms.html 介绍几个常用的函数&#xff1a; ① transforms.Resize(&#xff09; 将图像转换成目标大小 参数列表&#xff1a; size (sequence or int)&#xff1a; &#xff08;h,w&a…

Scala 中的 List 列表详解

目录 一、不可变长的List列表 1.List列表的声明与遍历 2.List列表的map、flatMap函数 3.List列表的filter过滤函数 4.List列表的count计数函数 二、可变长的List列表 1.可变长List声明 2.可变长List的添加方法 三、List列表其余的方法与函数 一、不可变长的List列表 …

任务调度原理 通俗讲解详细(FreeRTOS)

寄存器说明 以cortex-M3&#xff0c;首先先要了解比较特别的几个寄存器&#xff1a; r15 PC程序计数器&#xff08;Program Counter&#xff09;,存储下一条要执行的指令的地址。 r14 LR连接寄存器&#xff08;Link Register &#xff09;&#xff0c;保存函数返回地址&#x…

记忆化搜索-滑雪

题意 给定一个 R 行 C 列的矩阵&#xff0c;表示一个矩形网格滑雪场。 矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。 一个人从滑雪场中的某个区域内出发&#xff0c;每次可以向上下左右任意一个方向滑动一个单位距离。 当然&#xff0c;一个人能够滑动到某…

论文笔记:基于U-Net深度学习网络的地震数据断层检测

0 论文简介 论文&#xff1a;基于U-Net深度学习网络的地震数据断层检测 发表&#xff1a;2021年发表在石油地球物理勘探 1 问题分析和主要解决思路 问题&#xff1a;断层智能识别&#xff0c;就是如何利用人工智能技术识别出断层。 解决思路&#xff1a;结合&#xff35;-N…

nginx快速入门

本文应侧重操作应用&#xff0c;复杂原理详见相关理论类笔记 Nginx 快速入门笔记 Nginx 的简介 1. 什么是 nginx ​ Nginx 可以作为静态页面的 web 服务器&#xff0c;同时还支持 CGI 协议的动态语言&#xff0c;比如 perl、php等。但是不支持 java。Java 程序只能通过与 t…

tauri+rust 构建项目

文章目录 安装前依赖创建项目第一步第二步第三步最后一步 调试 昨天菜鸟尝试使用 taurirust 构建项目&#xff0c;按照网上的感觉都不是很全&#xff0c;所以这里菜鸟自己总结一下&#xff0c;主要是给自己今后学习 taurirust 使用的&#xff0c;当然也不知道会不会去学&#x…

全球医疗器械研发投入前十,这家中国公司领跑榜单

2023年&#xff0c;《医疗设计》杂志公布了最新一期百强榜&#xff0c;评选出了2022全球医疗器械行业最高研发支出和项目的十家公司。这些公司的每年研发支出超过收入的15%。尽管经济面临逆风&#xff0c;医疗器械行业的销售额却创下了新的历史高点&#xff0c;研发支出也加速增…