ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结
EF Core
EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护
可以把实体模型 分离出去,每个类创建一个实体模型
public class BookConfiguration :IEntityTypeConfiguration<Account>
{public void Configure(EntityTypeBuilder<Book> builder){// 把之前上下文中的 OnModelCreating(ModelBuilder modelBuilder) // 对应Account 的数据模型 复制到此处 即可builder.ToAble("Book")}
}
》》》原来的上下文中 替换成如下
protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}
EF Core 环境搭建
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; }//作者名字
}
IEnityTypeConfiguration 配置类
class BookEntityConfig : IEntityTypeConfiguration<Book> //指定是对那个类进行配置
{public void Configure(EntityTypeBuilder<Book> builder) //实现接口{// Fluent APIbuilder.ToTable("T_Books"); //实体对象在数据库中表的名字是“T_Books”//没有详细设置每个属性在数据库中的列明和数据类型//会默认吧属性名字作为列明,并根据属性类型来推断数据库中的数据类型//可以根据需要修改实体类的配置,进而修改数据库的表//HasMaxLength(50):最大长度为50 IsRequired():不可为空builder.Property(e => e.Title).HasMaxLength(50).IsRequired();builder.Property(e => e.AuthorName).HasMaxLength(20).IsRequired();}
}
上下文
using Microsoft.EntityFrameworkCore;
class TestDbContext : DbContext
{public DbSet<Book> Books { get; set; } //可对上文的Book实体进行操作//配置数据库的连接protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSql("链接字符串或者取配置文件");optionsBuilder.LogTo(Console.WriteLine);}protected override void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);//设置需要加载的程序集//加载当前程序集中所有实现了IEntityTypeConfiguration接口的类modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);}
}
migration
到此,EF Core的环境搭建完成,总结一下,目前还没有数据库只是定义了实体对象, EF Core会根据我们定义的实体对象自动生成数据库,这种操作也被称之为迁移(migration)
目前只是实体对象创建完成,但是还没有在数据库中生成相应的表。
安装Nuget包Microsoft.EntityFrameworkCore.Tools。
在程序包管理器控制台中执行
Add-Migration 自定义名称,
这个一个迁移命令,建议名称是有意义的。
会自动在项目下生成Migrations文件夹,文件夹下生成相应的代码,其中名称为日期ID号_自定义名称的类,
其主要功能是创建数据库。
以上只是创建了生成数据库的类,但并没有执行。
在程序包管理器控制台中使用
Update-database
执行数据库迁移代码。
如果此时修改了BookEntityConfig中属性设置,需要再次执行一次{修改一次,就需要做一次迁移和Update-database}
Add-Migration 自定义名称,此时名称要和之前的不一样。
再次执行Update-database
预定大于配置
Data Annotation 数据注解
使用.net提供的Attribute对实体类、属性进行标注,来实现实体类的配置。
[Table("T_Books")] //将数据库表名设置为T_Books
public class Book
{public long Id { get; set; }//主键//将Title属性最大长度设置为50,且不能为空[MaxLength(50)] [Required]public string Title { get; set; }//标题public DateTime PubTime { get; set; }//发布日期public double Price { get; set; }//单价[MaxLength(20)][Required]public string AuthorName { get; set; }//作者名字
}
Fluent API
编写实现了IEntityTypeConfiguration接口的实体配置类
class BookEntityConfig : IEntityTypeConfiguration<Book> //指定是对那个类进行配置
{public void Configure(EntityTypeBuilder<Book> builder) //实现接口{// Fluent APIbuilder.ToTable("T_Books"); //实体对象在数据库中表的名字是“T_Books”//没有详细设置每个属性在数据库中的列明和数据类型//会默认吧属性名字作为列明,并根据属性类型来推断数据库中的数据类型//可以根据需要修改实体类的配置,进而修改数据库的表//HasMaxLength(50):最大长度为50 IsRequired():不可为空builder.Property(e => e.Title).HasMaxLength(50).IsRequired();builder.Property(e => e.AuthorName).HasMaxLength(20).IsRequired();}
}
关系配置
资料
》》》文章Article和评论Article的关系就是一对多
public class Article
{public long Id { get; set; }//主键public string Title { get; set; }//标题public string Content { get; set; }//内容public List<Comment> Comments { get; set; } = new List<Comment>(); //此文章的若干条评论
}public class Comment
{public long Id { get; set; }public Article Article { get; set; } //对应的文章public string Message { get; set; }
}
Article a1 = new Article();
a1.Title = "微软发布.NET 6大版本的首个预览";
a1.Content = "微软昨日在一篇官网博客文章中宣布了 .NET 6 首个预览版本的到来。";
Comment c1 = new Comment() { Message = "支持" };
Comment c2 = new Comment() { Message = "微软太牛了" };
Comment c3 = new Comment() { Message = "火钳刘明" };
a1.Comments.Add(c1);
a1.Comments.Add(c2);
a1.Comments.Add(c3);
using TestDbContext ctx = new TestDbContext();
ctx.Articles.Add(a1);//只需要加入Article就可以,会自动增加Comment对象到数据库
await ctx.SaveChangesAsync();
显示加载 Include 起到关联查询
Article a = ctx.Articles.Include(a => a.Comments).Single(a => a.Id == 1);
Include方法起到了关联查询作用,用它生成对其他关联实体的查询操作
使用Include不仅仅能够查询到id=1的文章,也能查询到该文章所对应的评论
Article a = ctx.Articles.Include(a => a.Comments).Single(a => a.Id == 1);
Console.WriteLine(a.Title);
foreach (Comment c in a.Comments)
{Console.WriteLine(c.Id + ":" + c.Message);
}
EF Core高级技术
EF Core 原理
EF Core性能优化
相关文章:

ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去,每个类创建一个实体模型 public class BookConfiguration :IEntityT…...

u3d动画系统五【StateMachineBehaviour类】
一.StateMachineBehaviour概述 状态机行为是一类特殊脚本。与将常规 Unity 脚本 (MonoBehaviour) 附加到单个游戏对象类似,您可以将 StateMachineBehaviour 脚本附加到状态机中的单个状态。因此可编写一些将在状态机进入、退出或保持在特定状态时执行的代码。这意味…...

IS-IS协议
IS-IS协议介绍 IS-IS(Intermediate System to Intermediate System)协议是一种链路状态的内部网关协议(IGP),用于在同一个自治系统(Autonomous System, AS)内部的路由器之间交换路由信息。IS-I…...

使用C++实现RSA加密解密
一,RSA简介。 RSA,一种非对称加密方式。是目前为止最有影响力的加密算法之一,而且是第一个同时应用于加密和数字签名的算法。 其原理为:两个大素数相乘容易,但是若想将两个大素数相乘的积再分解为两个原始的素数很难…...
C++归并与快速
快排 #include<bits/stdc.h> #include<algorithm> using namespace std; void f(int,int); void cl(int,int,int); void q(int,int); int a[211]; int n; int main(){cin>>n;for(int i0;i<n;i){cin>>a[i];}q(0,n-1);for(int i0;i<n;i){cout<…...

金蝶云苍穹踩过的坑(慢慢更新)
IDEA不能用最新版,不然搜不到金蝶的插件。 我用的是2024.1.7/2023.1.7 IDEA里增加金蝶插件库的地址也变了,现在是 https://tool.kingdee.com/kddt/idea-updatePlugins.xml 金蝶云苍穹部署在服务器 MAC本地IDEA调试的时候,登录N次能成功一次…...

AndroidStudio——安卓项目结构与文件介绍
一、AndroidStudio界面 一个安卓项目界面主要由以下几部分组成: 1.菜单栏:位于顶部,基本的各项菜单操作 2.项目结构:通常位于左侧,展示当前项目的目录结构 3.编辑窗口:通常位于中间,可以用于编…...

华为自反ACL实验
一、实验背景 做这个实验的原因是最近公司里上了三台小程序服务器,由于三台服务器的端口都映射出去了,领导要求A网段的三台服务器不能访问内网B,C网段,同时B、C网段内网用户可以访问A段的94、95、96服务器; 也就是PC4\…...
yml和xml分别代表什么
YML 和 XML 是两种不同的数据序列化格式,它们在软件开发和数据交换中有着广泛的应用: YAML (YAML Ain’t Markup Language): YAML 是一种用于数据序列化的人类可读语言。它被设计为易于阅读和编写,特别适合于配置文件。YAML 使用缩进来表示数…...
Qt多线程编程
在Qt中,多线程编程是一个常见的需求,特别是当你需要执行耗时的后台任务而不希望阻塞用户界面时。多线程编程它允许应用程序同时执行多个任务,从而提高性能和响应速度。Qt提供了一套完善的多线程支持,包括线程类(QThrea…...

springboot438校园志愿者管理系统(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统校园志愿者管理系统信息管理难度大,容错率低&…...

PostgreSQL 常用运维SQL整理
一、查询并杀会话 -- 查询会话 select pid,usename,client_addr,client_port,query_start,query,wait_event from pg_stat_activity; -- 杀会话 select pg_terminate_backend(pid号); -- 使用如下命令自动生成杀会话语句 select datid,datname,pid,usesysid,usename,applicat…...
Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析
Debezium Oracle CTAS 解析器实现:基于 ANTLR 的 CREATE TABLE AS SELECT 语句解析 本文详细介绍了 Debezium Oracle 连接器中如何解析 CREATE TABLE AS SELECT (CTAS) 语句,通过具体的实现代码帮助读者理解 ANTLR 监听器在复杂 SQL 解析中的应用。 文章目录 Debezium Oracle…...

从零开始学docker(五)-可用的docker镜像
最近docker镜像都不能访问,目前亲测可用的docker镜像可用,并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表,只能手动查询索引目录(解决方案在最后)。 linux服务器vim打开镜像文件daemon.json vim /e…...

力扣——322. 零钱兑换
给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...
.Net_比对Json文件是否一致
简介 该方法用于比较两个Json文件是否完全一致,仅考虑内容若两个文件中的内容只是顺序不一致,内容是一样的,那么也代表这两个文件是相等的 实现代码 调用 using CompareJsonFiles;Console.WriteLine(" 输入信息 ");Console.WriteL…...

科研笔记:ARR 与 ACL rolling
1 ARR 介绍 ARR 提供 评审服务 —— 仅限评审 —— 对于提交的论文。评审不会针对特定会议/场所,但评审标准与传统会议的主会场长文或短文提交要求相同(如 ACL 或其他由 ACL 主办的重要会议) 2 提交论文进行 ARR 评审 提交截止日期 每两个…...

【2024】Camunda常用功能基本详细介绍和使用-上 (1)
这里写目录标题 前言一、 介绍基本概念介绍1.BPMN2.Form3.DMN 二、Camunda使用1、下载安装1.1、camunda-modeler:BPMN绘画工具1.2、camunda-bpm-run:web端控制页面 2、创建流程2.1、部署一个基础流程2.2、添加用户任务2.2.1、绑定表单2.2.1.1、Generated…...

用人话讲计算机:Python篇!(十二)正则运算+re模块
目录 一、正则表达式 (1)什么是正则表达式 (2)它的结构及使用 示例: 1.字符 . (←这里有个小点哦) 2.字符 | 3.字符 [ ] 4.字符^ 5.字符\d (3)补充ÿ…...

使用create-react-app创建工程时报错处理
1:全局安装create-react-app npm install -g create-react-app 2:切换到项目要创建的目录下 cd /d G:\vsCode_project\react 3:使用脚手架命令创建工程 create-react-app 项目名 项目名命名要遵循npm包命名规范:数字、小写字…...

【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...