前言

作为一直在dotNet行业耕耘的码农,这几年在大大小小项目中也涉及到了许多ORM框架,比如:EFCore,Dapper,NHibernate,SqlSugar等等,这些ORM都有各自的优缺点,大家在选择上呢也是仁者见仁智者见智,其实按自身项目的需求来就好,没有最好的只有最合适的。

就我自身的情况来说用的比较多的还是EF Core,回想过来自己也算是EFCore的忠实粉丝了吧,哈哈哈!

最近在倒腾EF Core官网时,看到在最新的EFCore6.0的Priview4中EFCore开发团队对于EFCore性能的提升,EFCore6会比EFCore5快了70%,以及在执行查询的速度方面提高了31%,堆分配减少了43%。在 TechEmpower Fortunes 基准测试中,对比Dapper和EF Core之间的差距从55%缩小到略低于5%。到此,我们可以好好展望展望EF Core7了。

对这方面感兴趣的同学可自行前往官网了解:

EF Core6.0的新增功能

宣布推出 Entity Framework Core 6.0 预览版 4:性能版本

看到这里,那些一直想用EF Core又担心EF Core性能达不到项目要求的同学,现在可以大胆的用起来了。

本篇教程我会站在小白的视角来教大家一步步使用EF Core,并且会按照项目开发的标准来,同学们可以直接应用到实际项目中。

当然,如果前来拜访的是行业大佬,那咱借一步说话,就不班门弄斧了。

如果是之前对EF Core不了解的同学那亦可在此稍作停留,喝喝茶,嗑嗑瓜子,听我娓娓道来。

技术准备

  • Visual Studio 2022
  • .Net Core 6
  • EF Core 6
  • SQL Server

搭建项目

创建项目

打开Visual Studio2022,选择ASP.NET Core空项目基于.Net6 创建

注:.Net 6已将Startup.cs文件和Program.cs统一到单个Program.cs文件中

想了解.Net6更多变化请移步官网 传送门 .Net 6

安装 Entity Framework Core

我们先来安装几个Nuget包(后续会用到):

Microsoft.EntityFrameworkCore.SqlServer (适用于EF Core SQL Server 提供程序)

Microsoft.EntityFrameworkCore.Design(适用于EF Core .NET Core CLI 工具 )

Microsoft.EntityFrameworkCore.Tools(适用于 EF Core 的包管理器控制台工具)

使用Visual Studio NuGet 包管理器控制台安装

入口:工具>NuGet包管理器>程序包管理器控制台

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools

Install-Package Microsoft.EntityFrameworkCore.Design

使用NuGet 包管理器安装

## 创建实体类

Blog与Post建立一对多的关系

Blog.cs



Post.cs

创建上下文类

注:数据库上下文类是为给定数据模型协调 EF Core 功能的主类。 上下文派生自 Microsoft.EntityFrameworkCore.DbContext。 上下文指定数据模型中包含哪些实体。

新建BloggingContext.cs,然后继承DbContext

然后我们需要将我们的BloggingDbContext的配置传递给DbContext

ApplicationDbContext 类必须公开具有 DbContextOptions 参数的公共构造函数。 这是将 AddDbContext 的上下文配置传递到 DbContext 的方式

这样配置后,BloggingDbContext可以通过构造函数注入在 ASP.NET Core 控制器或其他服务中使用:

例如:

我们需要通过上下文中的DbSet属性将我们的模型加入上下文中,并且公开它们

由于一个实体集包含多个实体,因此许多开发人员更倾向于使用复数形式的 DBSet 属性名称

  • 将为每个实体集创建一个 DbSet 属性。 在 EF Core 术语中:

    • 实体集通常对应数据库表。
    • 实体对应表中的行。

我们重写OnModelCreating方法来进一步配置我们刚刚我们往上下文中加入的实体

这里有几种方式配置(推荐方法二),此处采用Fluent API方式配置,也可采用数据注释方式(不建议)

详见官网EF Core实体类型配置

(1)可以直接堆在OnModelCreating中(不推荐):



(2)通过IEntityTypeConfiguration配置(推荐)

我们给对应实体建立对应的EntityTypeConfiguration配置文件

BlogEntityTypeConfiguration.cs



PostEntityTypeConfiguration.cs



BloggingContext.cs



更多关于Fluent API的配置 请移步官网查看创建模型

注入DbContext

Program.cs



appsettings.Development.json 自行配置数据库连接字符串

使用Code First 根据实体生成数据库

打开程序包管理控制台

第一步生成迁移文件:

这里有几个需要注意的地方

(1)解决方案能够编译通过

(2)将目标项目设为启动项

(3)程序包管理控制台中的默认项目一栏选择目标项目

Add-Migration Init 直接回车即可



第二步将生成的迁移文件执行到DB中即可

输入 update-database 直接回车即可



出现Done 则为执行完毕



我们可以去查看数据库了



数据库中成功生成了我们配置的对应的表结构。

当然,我们也可以在初始化数据库之前配置种子数据。

感兴趣的同学可以移步官网查看 种子数据设定

配置方法都大差不差

当然 EFCore 也支持DBFirst,您可以通过数据库中已存在的表结构来生成的实体

由于本文篇幅有限,关于DBFirst您可以选择去官网学习,也可以等我后续文章。

结尾

文章如有不妥之处,欢迎大家指正。

后续还会分享关于EF Core在项目中使用经验的文章,包括踩坑以及优化方面,欢迎大家关注!

EFCore 6.0入门看这篇就够了的更多相关文章

  1. React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  2. [转帖]Zookeeper入门看这篇就够了

    Zookeeper入门看这篇就够了 https://my.oschina.net/u/3796575/blog/1845035 Zookeeper是什么 官方文档上这么解释zookeeper,它是一个 ...

  3. [转]React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  4. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

  5. Zookeeper入门看这篇就够了!!

    Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名 ...

  6. ZooKeeper 入门看这篇就够了

    什么是 ZooKeeper? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务.ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原 ...

  7. Storm入门,看这篇就够了

    部分一:Srorm 简介 1.1 Storm是实时的数据流,Hadoop是批量离线数据 起源背景 Twitter 开源的一个类似于Hadoop的实时数据处理框架 Storm是由Nathan Marz ...

  8. Zookeeper入门看这篇就够了

    https://blog.csdn.net/java_66666/article/details/81015302

  9. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了   原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...

随机推荐

  1. java方法学习

    java方法学习 方法概念 什么是方法 方法就是完成某些事情的过程,如:实现两个数相加,用方法add(数值1,数值2). 1.System.out.print(),System是系统的一个类,out是 ...

  2. 【Azure Developer - 密钥保管库 】使用 Python Azure SDK 实现从 Azure Key Vault Certificate 中下载证书(PEM文件)

    问题描述 在Azure Key Vault中,我们可以从Azure门户中下载证书PEM文件到本地. 可以通过OpenSSL把PFX文件转换到PEM文件.然后用TXT方式查看内容,操作步骤如下图: Op ...

  3. Redis 中的 set 和 sorted set 如何使用,源码实现分析

    set 和 sorted set 前言 set 常见命令 set 的使用场景 看下源码实现 insert dict sorted set 常见的命令 使用场景 分析下源码实现 ZADD ZRANGE ...

  4. source insight新建工程

    1.打开Source Insight.如果已经打开过项目,则选择Project->Close Project.然后点击Project->New Project: 2.在弹出界面填入项目名 ...

  5. RabbitMQ Go客户端教程3——发布/订阅

    本文翻译自RabbitMQ官网的Go语言客户端系列教程,本文首发于我的个人博客:liwenzhou.com,教程共分为六篇,本文是第三篇--发布/订阅. 这些教程涵盖了使用RabbitMQ创建消息传递 ...

  6. 保姆教程系列二、Nacos实现注册中心

    前言: 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i 上篇我们介绍到  保姆教程系列一.Linux搭建Nacos 注册中心原理 一.环境准备 Java版本:1.8+   (Linux ce ...

  7. VUE开发--环境配置(一)(转)

    无剑_君关注 0.312019.05.09 11:53:43字数 1,073阅读 19,627        https://www.jianshu.com/p/a494417def99?utm_so ...

  8. SpringBoot bean映射yml中的属性举例

    pom:导入配置文件处理器,配置文件进行绑定就会有提示 <dependency> <groupId>org.springframework.boot</groupId&g ...

  9. kafka中的broker 是干什么的?

     broker 是消息的代理,Producers往Brokers里面的指定Topic中写消息,Consumers从Brokers里面拉取指定Topic的消息,然后进行业务处理,broker在中间起到一 ...

  10. swagger-ui提交请求无name(指input中的name属性)值

    swagger-ui提交请求,请求不包含name值,造成后台无法进行接受参数. @Operation(description = "上传文件",tags = "上传&qu ...