杨中科 EFCore 第二部分 实体配置

news2024/11/19 10:28:55

实体的配置

约定配置

主要规则:
1:表名采用DbContext中的对应的DbSet的属性名。
2:数据表列的名字采用实体类属性的名字,列的数据类型采用和实体类属性类型最兼容的类型。
3:数据表列的可空性取决于对应实体类属性的可空性。
4:名字为Id的属性为主键,如果主键为short,int 或者long类型,则默认采用自增字段,如果主键为Guid类型则默认采用默认的Guid生成机制生成主键值。

两种配置方式

l、Data Annotation把配置以特性 (Annotation)的形式标注在实体类中。
[Table(“T_Books”)]
public class Book
优点:简单;缺点:耦合。

2、Fluent API 【推荐】
builder.ToTable(“T_Books”);
把配置写到单独的配置类中。
缺点:复杂;优点:解耦

3、大部分功能重叠。可以混用,但是不建议混用

示例:
1.新建 Cat 类
在这里插入图片描述
2.将类信息加到 Dbcontext 中
在这里插入图片描述
3.添加特性
在这里插入图片描述
执行编译和运行命令:
在这里插入图片描述
在这里插入图片描述
表 生成成功
在这里插入图片描述
使用Fluent API 的好处是可以根据实际情况,修改代码结构 ,生成不同类型表名,字段等。 可定制化性 提高

Fluent API 1

只过一遍,不演示
1、视图与实体类映射:
modelBuilder.Entity(.ToView(“blogsView”);
2、排除属性映射:(让某个属性,不映射到表中)
modelBuilder.Entity().lgnore(b => b. Name2);
3、配置列名:(将某个字段改为自己想要的名字)
modelBuilder.Entity().Property(b=>b.BlogId).HasColumnName(“blog_id”);
4、配置列数据类型:
builder.Property(e => e.Title) .HasColumnType(“varchar(200)”)
5、配置主键
默认把名字为Id或者“实体类型+Id“的属性作为主键,可以用HasKey()来配置其他属性作不演示映射: modelBuilder.Entity().HasKey(c=>c.Number);

支持复合主键,但是不建议使用

增加 Name2字段
在这里插入图片描述
在这里插入图片描述
执行:
在这里插入图片描述

Fluent API 2

6、生成列的值
modelBuilder.Entity().Property(b =>b.Number).ValueGeneratedOnAdd();
7、可以用HasDefaultValue0为属性设定默认值modelBuilder.Entity().Property(b =>b.Age).HasDefaultValue(6);
8、索引
modelBuilder.Entity().HasIndex(b => b.Url);
复合索引modelBuilder.Entity().HasIndex(p => new { p.FirstName,p.LastName});唯一索引: IsUnique0; 聚集索引: IsClustered()
9… 用EF Core太多高级特性的时候谨慎,尽量不要和业务逻辑混合在一起,以免“不能自拔”。比如Ignore、Shadow、Table Splitting等…

EFCORE Fluent API 其他

Fluent API众多方法

Fluent API中很多方法都有多个重载方法。比如HasIndexProperty().把Number属性定义为索引,下面两种方法都可以:
builder.HasIndex(“Number”);
builder.HasIndex(b=>b.Number);
推荐使用HasIndex(b=>b.Number)、Property(b => b.Number)这样的写法因为这样利用的是C#的强类型检查机制(字符串的方式,无法判断语法错误)

在这里插入图片描述

选择

1、Data Annotation 、Fluent API大部分功能重叠。可以混用但是不建议混用。
2、有人建议混用,即用了Data Annotation 的简单,又用到Fluent API的强大,而且实体类上标注的[MaxLength(50)][Required]等标注可以被ASPNET Core中的验证框架等复用。我为什么不建议混用。
3、我和业界很多人都倾向只使用Fluent API。本课以讲解FluentAPI为主(尽量用约定),如果项目强制用Data Annotation 请翻文档,知识都是通用的。

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

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

相关文章

isis实验

根据要求制作大概: 使用isis配置路由器: 配置好物理接口地址后配置isis 为实现r1访问r5的环回走r6,需要在r6上制作路由泄露: 在r5上产生r1的路由明细: 全网可达:

Linux学习之网络编程1(纯理论)

写在前面 刚刚更新完Linux系统编程,特别推荐大家去看的Linux系统编程,总共44个小时,老师讲的非常好,我是十天肝完的,每天大概看20集,每天还要以写blog的形式来写笔记来总结一下,虽然这十天有点…

Redis(概述、应用场景、线程模式、数据持久化、数据一致、事务、集群、哨兵、key过期策略、缓存穿透、击穿、雪崩)

目录 Redis概述 应用场景 Redis的线程模式 数据持久化 1.Rdb(Redis DataBase) 2.Aof(Append Only File) mysql与redis保持数据一致 redis事务 主从复制(Redis集群) 哨兵模式 key过期策略 缓存穿透、击穿、…

Docker安装Jenkins,配置Maven和Java

前言 这是一个java的springboot项目,使用maven构建 安装准备 需要将maven和jdk安装在服务器上,Jenkins需要用到,还有创建一个jenkins的目录,安装命令如下: docker run -d -uroot -p 9095:8080 -p 50000:50000 --n…

UE5 PCG插件场景静态网格模块化、快速搭建场景

PCG图表可以理解为静态网格体图表,里面可以自定义放不同有静态网格体、可以对密度、大小、面积等等在场景实际应中做相应的调整,可以根据地形高度随机生成静态网络体,可以模化作业。大大降低了场景制的时间成本。PCG插件目前需要UE5.2以上的版…

为什么光刻要用黄光

光刻是集成电路(IC或芯片)制造中的重要工艺之一。简单来说,它是通过使用光掩膜和光刻胶在基板上复制电路图案的过程。 基板将涂覆硅二氧化层绝缘层和光刻胶。光刻胶在被紫外光照射后可以容易地用显影剂溶解,然后在腐蚀后&#xf…

手把手图解教你Java SPI源码分析

原创/朱季谦 我在《Java SPI机制总结系列之开发入门实例》一文当中,分享了Java SPI的玩法,但是这只是基于表面的应用。若要明白其中的原理实现,还需深入到底层源码,分析一番。 这里再重温一下SPI机制的概念:SPI&#…

WSDM 2024 Oral | 港大提出DiffKG:融合知识图谱与扩散模型,为推荐系统赋能

论文链接: https://arxiv.org/abs/2312.16890 代码链接: https://github.com/HKUDS/DiffKG 实验室链接: https://sites.google.com/view/chaoh TLDR 知识图谱已成为提升推荐系统性能的重要资源,能提供丰富的事实信息并揭示实体间的…

Element-Puls Form表单内嵌套el-table表格,根据表格复选框多选或单选动态设置行的验证规则

需求 根据 Table 表格内的复选框来控制当前选中行是否添加必填校验规则 效果图 实现思想 我们需要设置一个 flag 来标识已勾选的行,el-table渲染数据结构是数组对象形式,我们可以在每个对象中手动加如一个标识,例如默认:selected …

Embeddings: What they are and why they matter

embeddings 是什么意思https://simonwillison.net/2023/Oct/23/embeddings/推荐原因:GPT 模型的基础是一种叫做 embeddings 的技术,用来将文本转换成向量,从而可以计算出文本之间的相似度。这篇文章详细地介绍了embeddings及应用 Embeddings…

NLP论文阅读记录 - 2021 | WOS 抽象文本摘要:使用词义消歧和语义内容泛化增强序列到序列模型

文章目录 前言0、论文摘要一、Introduction二.前提三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization: Enhancing Sequen…

【CSS】保持元素宽高比

保持元素的宽高比,在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时,元素的尺寸随之变化,且宽高比不变。 代码实现 我们用最简单的元素结构来演示,实现宽高比为4&#xf…

AI大模型学习笔记二

文章目录 一、Prompt Engineering1)环境准备 二、LangChain(一个框架名字)三、Fine-tuning(微调) 一、Prompt Engineering 1)环境准备 ①安装OpenAI库 pip install --upgrade openai附加 安装来源 pyth…

中职组安全-win20230217-环境-解析

*任务说明: 仅能获取win20230217的IP地址 用户名:test,密码:123456 访问服务器主机,找到主机中管理员名称,将管理员名称作为Flag值提交; john 访问服务器主机,找到主机中补丁信息,将补丁编号作为Flag值提交&#xff…

NLP论文阅读记录 - 2022 | WOS 一种新颖的优化的与语言无关的文本摘要技术

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.前提三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Novel Optimized Language-Independent Text Summarization Techni…

【OJ】环形链表

目录 1. 环形链表||(142)1.1 题目描述1.2 题目分析1.3 代码 2. 环形链表(141)2.1 题目描述2.2 题目分析2.3 代码 1. 环形链表||(142) 1.1 题目描述 1.2 题目分析 带环链表:尾节点的next指向链…

QLExpress和Groovy对比

原理 Groovy groovy基于JVM运行。 编译时:将源文件编译成class文件后,用java的classLoader加载;运行时:直接用groovy classLoader加载 QLExpress QLExpress将文本解析成AST,用java对象表达后执行。 特点 Groo…

【JaveWeb教程】(27)Mybatis的XML配置文件与Mybatis动态SQL 详细代码示例讲解

目录 2. Mybatis的XML配置文件2.1 XML配置文件规范2.2 XML配置文件实现2.3 MybatisX的使用 3. Mybatis动态SQL3.1 什么是动态SQL3.2 动态SQL-if3.2.1 条件查询3.2.2 更新员工 3.3 动态SQL-foreach3.4 动态SQL-sql&include 2. Mybatis的XML配置文件 Mybatis的开发有两种方式…

基于ssm的理财通的设计与实现+jsp论文

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对理财信息管理的提升&#xff0c…

DeepFloyd IF:由文本生成图像的强大模型,能够绘制文字的 AI 图像工具

文章目录 一、DeepFloyd IF 简介二、DeepFloyd IF模型架构三、DeepFloyd IF模型生成流程四、DeepFloyd IF 模型定义 一、DeepFloyd IF 简介 DeepFloyd IF:能够绘制文字的 AI 图像工具 之前的 Stable Diffusion 和 Midjourney 都无法生成带有文字的图片,…