![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
EFCore
文章平均质量分 61
梁萌
认真是一种态度
展开
-
EFCore-13 多对多关系配置
学生与老师的关系,是一个常见的多对多的关系模型,一个老师有多个学生,一个学生也可能有多个老师。关系模型图如下所示:新建一个控制台应用程序控制台项目结构:项目引用的程序集:Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Tools1.在实体类中定义关系属性Student.csusing System.Collections.Generic;n...原创 2022-05-29 17:40:40 · 2098 阅读 · 1 评论 -
EFCore-12 一对一关系配置
商品订单和快递单的关系,一般情况下是一对一的,在网上购买商品下一个订单,这个订单会生成一个对应的快递单。如下图所示:新建一个控制台应用程序控制台项目结构:项目引用的程序集:Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Tools1.在实体类中定义关系属性Order.csusing System;using System.Collecti...原创 2022-05-29 16:38:13 · 1259 阅读 · 0 评论 -
EFCore-11 自引用关系配置
在数据库中表示这样的一个组织关系,可以使用自引用的方式实现,也就是主键和外键在同一张表中。新建一个控制台应用程序控制台项目结构:项目引用的程序集:Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Tools1.在实体类中定义关系属性OrgUnit.csusing System.Collections.Generic;namesp..原创 2022-05-29 12:27:55 · 1589 阅读 · 6 评论 -
EFCore-10 导航属性
何为导航属性,通俗一些讲就是通过该属性可以访问到另外一个实体。例如评论表中对应的文章属性,文章表中对应的评论属性,这些都是导航属性。明白了什么是导航属性,那么导航属性又分区两类。一类是单向导航属性,一类是双向导航属性。像上面截图所示的那样,在文章实体和评论实体中均可以找到另外一个实体的属性称为双向导航。双向导航的相关配置可以参考前面的文章。下面这个实例中,员工信息和员工请假单信息两个实体之间,就属于单向导航,只可以从员工请假单实体中找到员工信息,但是员工信息中不能够找到请假单的实体。.原创 2022-04-11 18:12:37 · 3079 阅读 · 0 评论 -
EFCore-9 查询优化
本文章记录的内容,衔接上一篇文章的相关代码EFCore-8 一对多关系配置1.仅需要查询需要的字段,提升查询效率查询文章ID为7的文章记录及对应的评论记录EFCore对应的c#代码:Article article = ctx.Articles.Include(a => a.Comments).Single(a => a.Id == 7);EFCore生成的SQL为:SELECT [t].[Id], [t].[Message], [t].[Title], [..原创 2022-04-10 17:03:54 · 1320 阅读 · 0 评论 -
EFCore-8 一对多关系配置
在实际的应用场景中,一对多的关系是比较常见的,以文章和评论为例,一篇文章可能会存在多条评论。下面以代码实例记录一对多形式的关系在EFCore中的使用:控制台项目结构:项目引用的程序集:Microsoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Tools1.在实体类中定义关系属性文章实体类:using System.Collections.Generic;n..原创 2022-04-09 18:49:29 · 2277 阅读 · 2 评论 -
EFCore-7 查看EFCore转换后的SQL语句
使用EFCore框架,虽然我们写的是c#的语句,其实背后还是转换成了数据库可以执行的SQL。这一转换操作由EFCore框架执行。虽然使用EFCore框架我们更多的精力关注c#即可,但是要想真正了解EFCore的执行情况,还是需要查看框架转换后的SQL语句。这里记录三种查看方式:以下代码示例和操作基于上一节创建的控制台应用程序进行演示。上一节的项目代码地址EFCore-6 反向工程标准日志1.项目中引用控制台打印的程序集(这里只是输出到控制台,所以引用此程序集,如果要以其他方式输出,则原创 2022-04-04 09:03:26 · 2846 阅读 · 0 评论 -
EFCore-6 反向工程
反向工程就是DB First,根据数据库表来反向生成实体类代码,通俗讲就是数据库优先。该方法使用场景为已经有数据库了,数据库里面已经存在一些表,这时候想使用EF Core框架的情况。官方并不推荐使用反向工程,因为这种方法生成的代码,后期维护起来比较麻烦。推荐使用Code First模型,即代码优先。项目操作示例:1.在SqlServer数据库中新建一个库,名字为TestDbHR。在数据库中新建一个表,表名为T_PERSON,字段信息如下图所示。2.新建一个控制台项目,并引用下面两原创 2022-04-03 11:21:22 · 1535 阅读 · 0 评论 -
EFCore-5 Migration操作
migration相关说明:使用迁移脚本,可以对当前连接的数据库执行编号更高的迁移,这个操作叫做“向上迁移”(Up),也可以执行把数据库回退到旧版本的迁移,这个操作叫做“向下迁移”(Down)。 除非有特殊需要,否则不要删除migration文件夹下的代码。包括数据库自动生成的__EFMigrationsHistory表中的数据。如果人为删除可能会引发数据库版本混乱的情况。常用命令说明:1.add-migration XXX根据最新实体,生成数据库更新脚本。2.update-原创 2022-03-21 17:16:39 · 5142 阅读 · 0 评论 -
EFCore-4主键
EFCore支持多种主键生成策略:自动增长、GUID、Hi/Lo算法等。自增主键优点:1.简单。(数据库字段值自动增长,无需人工干预)2.long、int类型主键,默认是自增的(SqlServer数据库)。3.因为是数据库生成的值,所以SaveChangesAsync或者SaveChanges后会自动把主键的值更新到Id属性。缺点:1.数据库迁移以及分布式系统中比较麻烦。2.并发性能差。代码示例一:自增主键设置代码示例二:自增主键值自动更新原创 2022-02-20 17:51:59 · 2599 阅读 · 0 评论 -
EFCore-3FluentAPI
约定配置主要规则:1:表名采用DbContext中对应的DbSet的属性名。2.数据表列的名称采用实体类属性的名字,列的数据类型采用和实体类属性类型最兼容的类型。3.数据表列的可空性取决于对应实体类属性的可空性。4.名字为Id的属性为主键,如果主键为short,int 或者long类型,则默认采用自增字段,如果主键为Guid类型,则默认采用默认的Guid生成机制生成主键值。(SqlServer数据库)两种配置方式1.FluentAPI..原创 2022-02-12 18:26:21 · 1115 阅读 · 1 评论 -
EFCore-0文章目录
EFCore-1搭建开发环境EFCore-2数据增删改查原创 2022-01-29 17:05:36 · 421 阅读 · 0 评论 -
EFCore-2数据增删改查
数据插入1.只要操作Books属性,就可以向数据库中增加数据,但是通过c#代码修改Books中的数据只是修改了内存中的数据。对Books做修改后,需要调用DbContext的异步方法SaveChangesAsync()把修改的数据保存到数据库。也有同步保存方法SaveChanges(),但是EFCore更推荐使用异步方法。2.EFCore默认会跟踪(Track)实体类对象以及DbSet的改变。实例代码:using System;using System.Linq;using Sys原创 2022-01-29 16:55:59 · 2410 阅读 · 0 评论 -
EFCore-1搭建开发环境
使用SQL Server数据库作为学习的目标数据库,EFCore使用Code First模式进行项目初始化。项目整体目录如图所示:1.创建实体类using System;namespace EFCoreProject{ /// <summary> /// Book实体类 /// </summary> public class Book { public long Id { get; set; }.原创 2022-01-23 19:13:19 · 850 阅读 · 0 评论