当前位置: 首页 > news >正文

.NET Core FluentAPI

目录

约定配置

主要规则 

两种配置方式

Data Annotation

Fluent API

Fluent API配置

Fluent API众多方法

选择


约定配置

主要规则 

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

两种配置方式

Data Annotation

把配置以特性(Annotation)的形式标注在实体类中。

优点:简单;缺点:耦合。

[Table("T_Books")]
public class Book
{
}
Fluent API

把配置写到单独的配置类中。
缺点:复杂;优点:解耦。

builder.ToTable("T_Books");
Fluent API配置
  1. 视图与实体类映射:
    modelBuilder.Entity<Blog>().ToView("blogsView");
  2. 排除属性映射:
    modelBuilder.Entity<Blog>().Ignore(b => b. Name2);
  3. 配置列名:
    modelBuilder.Entity<Blog>().Property(b=>b.BlogId).HasColumnName("blog_id");
  4. 配置列数据类型:
    builder.Property(e => e.Title) .HasColumnType("varchar(200)")
  5. 配置主键:
    默认把名字为Id或者“实体类型+Id“的属性作为主键,可以用HasKey()来配置其他属性作为主键。modelBuilder.Entity<Student>().HasKey(c => c.Number);支持复合主键,但是不建议使用。
  6. 生成列的值:
    modelBuilder.Entity<Student>().Property(b => b.Number).ValueGeneratedOnAdd();
  7. 设置默认值:
    modelBuilder.Entity<Student>().Property(b => b.Age).HasDefaultValue(6);
  8. 索引:
    modelBuilder.Entity<Blog>().HasIndex(b => b.Url);
  9. 复合索引:
    modelBuilder.Entity<Person>().HasIndex(p => new { p.FirstName, p.LastName });
  10. 唯一索引:IsUnique();聚集索引:IsClustered()
  11. 用EF Core太多高级特性的时候谨慎,尽量不要和业务逻辑混合在一起,以免“不能自拔”。比如Ignore、Shadow、Table Splitting等……
Fluent API众多方法

Fluent API中很多方法都有多个重载方法。比如HasIndex、Property()。
把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]等标注可以被ASP.NET Core中的验证框架等复用。

相关文章:

.NET Core FluentAPI

目录 约定配置 主要规则 两种配置方式 Data Annotation Fluent API Fluent API配置 Fluent API众多方法 选择 约定配置 主要规则 表名采用DbContext中的对应的DbSet的属性名。数据表列的名字采用实体类属性的名字&#xff0c;列的数据类型采用和实体类属性类型最兼容…...

【C++数据结构——查找】顺序查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、根据输入数据建立顺序表 二、顺序表的输出 三、顺序查找算法 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;实现顺序查找的算法 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 根据输入数据建立…...

HTTP Scheme 通常指的是在 URL 中用于指定使用 HTTP 协议的方案(scheme)

HTTP Scheme 通常指的是在 URL 中用于指定使用 HTTP 协议的方案&#xff08;scheme&#xff09;。URL&#xff08;统一资源定位符&#xff09;中的 scheme 部分指明了访问资源所使用的协议。对于 HTTP&#xff0c;有两个主要的 scheme&#xff1a; - **http**&#xff1a;表示…...

基于Matlab的变压器仿真模型建模方法(13):单相升压自耦变压器的等效电路和仿真模型

1.单相升压自耦变压器的基本方程和等效电路 单相升压自耦变压器的接线原理图如图1所示。在建立自耦变压器的基本方程时,仍然把它看成是从双绕组变压器演变而来。在图1中,设节点a到节点b部分的绕组的匝数为,对应于双绕组变压器的原边绕组;节点c到节点a部分的绕组的绕组匝数为…...

【Vue.js】监听器功能(EventListener)的实际应用【合集】

目录 &#x1f914;在实际开发过程中&#xff0c;我遇到了一个颇为棘手的小问题 &#x1f60b;解决这个小问题 问题出现的原因剖析 解决方法阐述 问题成功解决&#xff01;​ &#x1f4d6;相关知识总结 基本概念 使用方法 实际应用场景 &#x1f914;在实际开发过程中…...

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目&#xff0c;因为自己的服务器小且项目简单&#xff0c;因此没有使用自动化部署。每次将jar包传到服务器后&#xff0c;需要手动构建&#xff0c;然后停止原有容器&#xff0c;并使用新的镜像启动&#xff0c;介于AI时代越来越懒的…...

【iOS Swift Moya 最新请求网络框架封装通用】

【iOS Swift Moya 最新请求网络框架封装通用】 前言框架结构1.API定义&#xff08;TargetType&#xff09;2. 配置MoyaProvider3. 网络管理器4. 使用示例注意事项进一步优化 前言 设计一个基于Moya的网络请求框架&#xff0c;可以提供灵活的网络请求管理&#xff0c;例如设置请…...

前端批量下载文件

背景 文件管理页面&#xff0c;后端只提供了一个根据 file_path 和 file_name 参数下载文件的API接口。产品需要支持用户多选之后的批量下载功能。 技术实现 基础代码 先调用下载接口&#xff0c;获取到二进制的文件流&#xff0c;然后通过 a 标签完成下载。 // return [r…...

【pytorch-lightning】架构一览

pytorch-lightning是基于pytorch的一个套壳项目&#xff0c;适配pytorch的版本同步更新速度很快。 它将训练的几个主要流程模块化&#xff0c;减少重复工作&#xff0c;同时让支持分布式训练&#xff0c;不同平台的训练迁移变得更加简单。 官网链接...

MongoDB相关使用问题

1.【报错】sort operation used more than the maximum 33554432 bytes of RAM. Add an index MongoDB 排序超过内存限制&#xff0c;限制最大为100M。 解决方式&#xff1a;将内存排序改为磁盘排序 正常用法&#xff1a;数据量大了再排序会报错 Autowired protected MongoO…...

DevSecOps自动化在安全关键型软件开发中的实践、Helix QAC Klocwork等SAST工具应用

DevSecOps自动化对于安全关键型软件开发至关重要。 那么&#xff0c;什么是DevSecOps自动化&#xff1f;具有哪些优势&#xff1f;为何助力安全关键型软件开发&#xff1f;让我们一起来深入了解~ 什么是DevSecOps自动化&#xff1f; DevSecOps自动化是指在软件开发生命周期的各…...

常见的显示器分辨率及其对应的像素数量

显示器的像素数量通常由其分辨率决定&#xff0c;分辨率表示为水平像素数乘以垂直像素数。 720P&#xff08;1280720&#xff09;&#xff1a; 像素数量&#xff1a;约92.16万特点&#xff1a;这是高清标准的一个分辨率&#xff0c;通常用于手机、平板电脑或小型显示器。900P&…...

TDengine + MQTT :车联网时序数据库如何高效接入

现代新能源汽车&#xff0c;作为一种内部系统极为复杂的交通工具&#xff0c;配备了大量传感器、导航设备、应用软件&#xff0c;这些传感器产生的数据都需要上报到车联网平台当中。对于这些车辆的状态数据&#xff08;如车速、发动机转速等&#xff09;、位置数据&#xff08;…...

maven的中国镜像有哪些

根据您的请求&#xff0c;以下是一些可用的 Maven 中国镜像&#xff1a; 阿里云 官网&#xff1a;阿里云 Maven 镜像配置&#xff1a;<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>…...

ModelScope ms-swift:轻量级模型微调框架

ModelScope ms-swift&#xff1a;轻量级模型微调框架 介绍支持的模型支持的技术使用方法为什么选择ms-swift&#xff1f;结论 介绍 ModelScope ms-swift是ModelScope社区提供的一个官方框架&#xff0c;用于大型语言模型&#xff08;LLMs&#xff09;和多模态大型模型&#xf…...

深度解析与实践:HTTP 协议

一、引言 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是 Web 应用程序、API、微服务以及几乎所有互联网通信的核心协议。虽然它是我们日常使用的基础技术&#xff0c;但要深刻理解其高效使用、优化以及如何避免性能瓶颈&#xff0c;我…...

Zookeeper是如何解决脑裂问题的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何解决脑裂问题的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何解决脑裂问题的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过一系列的机制来防止和解决脑裂&#xff08;sp…...

《Opencv》基础操作详解(5)

接上篇&#xff1a;《Opencv》基础操作详解&#xff08;4&#xff09;-CSDN博客 目录 接上篇&#xff1a;《Opencv》基础操作详解&#xff08;4&#xff09;-CSDN博客 25、轮廓近似 简介 接口用法 参数说明 返回值 代码示例 结果展示 26、轮廓最小外接圆 简介 接口用…...

AI大模型-提示工程学习笔记2

卷首语&#xff1a;我所知的是我自己非常无知&#xff0c;所以我要不断学习。 写给AI入行比较晚的小白们&#xff08;比如我自己&#xff09;看的&#xff0c;大神可以直接路过无视了。 提示词要素 提示词由以下几个要素组成&#xff1a; 指令&#xff1a;告诉模型需要完成什…...

AWS ELB基础知识

1.负载均衡器的类型 需要了解三种类型的 ELB&#xff1a; Application Load Balancer &#xff08;ALB&#xff09; **&#xff1a; 在 HTTP/HTTPS 层&#xff08;OSI 模型的第 7 层&#xff09;运行。非常适合路由 HTTP/HTTPS 流量。支持高级路由功能&#xff0c;例如基于 U…...

Qwen3互联网应用架构:构建可扩展的字幕处理微服务

Qwen3互联网应用架构&#xff1a;构建可扩展的字幕处理微服务 想象一下&#xff0c;你负责一个在线教育平台&#xff0c;每天有成千上万的用户上传课程视频。用户希望视频能立刻配上字幕&#xff0c;方便学习和搜索。高峰期时&#xff0c;每分钟可能有上百个视频同时涌入。如果…...

RVC免费神器:个人创作者的声音克隆利器

RVC免费神器&#xff1a;个人创作者的声音克隆利器 1. 引言&#xff1a;声音克隆的魅力 在数字内容创作领域&#xff0c;声音一直是最具表现力的元素之一。想象一下&#xff0c;你可以轻松复制自己的声音用于视频配音&#xff0c;或者为角色扮演游戏创建独特的语音角色&#…...

3D Face HRN人脸重建模型应用:为AR滤镜快速生成精准面部网格

3D Face HRN人脸重建模型应用&#xff1a;为AR滤镜快速生成精准面部网格 1. 从2D到3D的魔法&#xff1a;人脸重建技术革新 想象一下这样的场景&#xff1a;你正在开发一款AR美颜滤镜&#xff0c;需要让虚拟特效精准贴合用户面部。传统方案依赖复杂的面部关键点检测&#xff0…...

SeqGPT-560M开源模型效果展示:支持中英混排文本的多语言实体联合抽取

SeqGPT-560M开源模型效果展示&#xff1a;支持中英混排文本的多语言实体联合抽取 1. 项目概述 SeqGPT-560M是一个基于先进架构开发的企业级智能信息抽取系统&#xff0c;专门为非结构化文本处理而设计。这个系统在双路NVIDIA RTX 4090高性能计算环境下&#xff0c;能够实现毫…...

PyTorch 2.9镜像新手教程:5分钟学会调用预训练模型做推理

PyTorch 2.9镜像新手教程&#xff1a;5分钟学会调用预训练模型做推理 1. 为什么选择PyTorch 2.9镜像&#xff1f; PyTorch作为当前最流行的深度学习框架之一&#xff0c;其2.9版本带来了多项性能优化和新特性。对于刚入门深度学习的开发者来说&#xff0c;直接使用预配置好的…...

Janus-Pro-7B惊艳作品:古诗文本→水墨风图像→题跋文字自动生成

Janus-Pro-7B惊艳作品&#xff1a;古诗文本→水墨风图像→题跋文字自动生成 1. 引言&#xff1a;当AI遇见中国古典美学 想象一下这个场景&#xff1a;你读到了一首意境悠远的古诗&#xff0c;脑海中浮现出烟雨朦胧的山水画面&#xff0c;但苦于没有绘画功底&#xff0c;无法将…...

MATLAB代码:双层优化驱动的微电网系统多电源容量优化配置与运行策略规划设计方法

MATLAB代码&#xff1a;基于双层优化的的微电网系统规划设计方法 关键词&#xff1a;双层优化 容量配置 参考文档&#xff1a;《基于双层优化的的微电网系统规划设计方法》基本复现 仿真平台&#xff1a;MATLABCPLEX 与目前大部分的微网优化调度代码不同&#xff0c;本代码主…...

营销自动化数据驱动 - 多源数据 OLAP 架构演进墙

1. 流图&#xff1a;数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木&#xff0c;那么流图就像一条蜿蜒流淌的河流&#xff0c;河道的宽窄变化自然流畅&#xff0c;波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势&#xff0c;尤其是当你想强调整…...

GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑纪

我为什么会发出这个疑问呢&#xff1f;是因为我研究Web开发中的一个问题时&#xff0c;HTTP请求体在 Filter&#xff08;过滤器&#xff09;处被读取了之后&#xff0c;在 Controller&#xff08;控制层&#xff09;就读不到值了&#xff0c;使用 RequestBody 的时候。 无论是字…...

Oracle EBS vs SAP 科目架构对比表(含项目配置模板)

EBS vs SAP 科目架构对比表&#xff08;含项目配置模板&#xff09;说明&#xff1a;本表格基于制造/集团型企业项目实践编制&#xff0c;涵盖核心架构、实现逻辑、项目配置模板及关键差异&#xff0c;新增离散制造、流程制造两大细分领域专属配置&#xff0c;可直接用于系统选…...