EFcore的实体类配置

1 约定配置

约定大于配置,框架默认了许多实体类配置的规则,在约定规则不满足要求时,可以显示地定义规则
1 数据库表明在不指定的情况下,默认使用的是数据库上下文类【DBContext】中DbSet 的属性名;
2 数据库表列的名字默认使用的是实体类属性的名字;列的数据类型采用与实体类属性类型相兼容的类型;
3 数据库列的可空性取决于对应实体属性的可空性;
4 实体类的属性为Id时,在数据库中对应的是主键,若属性类型为short、int、long类型时,则在数据库中默认是自增的

2 显示定义模型类配置规则

该文章使用的是MySQL的数据库,这里使用到了模型驱动开发的模式【现有实体类,后有数据库表。需要使用到迁移指令的使用,本篇文章的重点不是迁移指令的使用,所以忽略该内容】

2.1 Fluent API

使用框架定义的方法去配置模型类与数据库表的关系,通常在实现了IEntityTypeConfiguration《T》的Configure(EntityTypeBuilder builder)方法中去使用FluentAPI的方式去配置

   public  class Book{/// <summary>/// 书籍ID/// </summary>public long Id { get; set; }/// <summary>/// 标题/// </summary>public string? Title { get; set; }/// <summary>/// 发布时间/// </summary>public DateTime PublishTime { get; set; }/// <summary>/// 价格/// </summary>public double Price { get; set; }/// <summary>/// 作者名称/// </summary>public string ?AuthorName { get; set; }/// <summary>/// 描述/// </summary>public string Desc { get; set; }}
    internal class BookConfiguration : IEntityTypeConfiguration<Book>{public void Configure(EntityTypeBuilder<Book> builder){//Book类对应数据库中的tb_book表builder.ToTable<Book>("t_books");//使用Fluent API的方式,显示地去配置类模型与数据库表的关系//HasColumnName指定数据库中列的名字builder.Property(e => e.Id).HasColumnName("id").IsRequired();//HasColumnType指定数据库中列的数据类型builder.Property(e => e.AuthorName).HasColumnType("varchar(100)").HasColumnName("author_name");//HasMaxLength 设定列的最大长度builder.Property(e => e.Title).HasColumnName("title").HasMaxLength(200);builder.Property(e => e.Price).HasColumnName("price");builder.Property(e => e.PublishTime).HasColumnName("publish_time");//实体类的属性默认全部会映射到数据库表中,可以使用Ignore去忽略制定的属性builder.Ignore(e=>e.Desc);}}

使用迁移指令后Update-database,将同步更新数据库中表信息。数据结构如下
在这里插入图片描述

2.2 Data Annotation

使用特性 【 A n n o t a t i o n 】 \textcolor{red}{【Annotation】} Annotation的方式去配置模型类与数据库表的映射关系

    //Table 指定表名称[Table("t_students")]internal class Student{public int Id { get; set; }//MaxLength 指定栏位长度 Required 指定列值必填[MaxLength(100)][Required]public string Name { get; set; }public int  Age { get; set; }}

使用迁移指令后Update-database,将同步更新数据库中表信息。数据结构如下
在这里插入图片描述

2.3 如何选用自定义配置规则

Data Annotation 相较于使用FluentAPI的方式更为简洁,只需要使用特性标注即可,不需要单独的写配置类,不过FluentAPI更为强大,能够完全替代Data Annotation ,但是使用特性的方式则无法完全取代FluentAPI。微软官方默认推荐使用FluentAPI去配置模型类,不过两者是可以同时混用的,可以在Data Annotation无法实现的情况下使用FluentAPI去配置模型类。

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

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

相关文章

19、【qlib】【其他组件/特性/主题】任务管理

简介 工作流部分介绍了如何松耦合地运行研究流程,但使用qrun时只能执行单个任务。为了自动地生成和执行不同的任务,任务管理模块提供了一整套流程,包括任务生成、任务存储、任务训练及任务收集。借助这个模块,用户可以在不同时间段、不同损失函数或甚至不同模型下自动运行…

简单的简单

现在有一个函数需要同时修改2个列表list且他们要保持相同长度&#xff0c;列表中的数据计算是CPU计算密集型&#xff0c;然后有很多个访问程序去读取这两个列表的值 import threading # 创建锁对象 lock threading.Lock() # 全局变量 global_list1 [] global_list2 [] def m…

摘录笔记——2024年3月22日

目录 一、背景 1.1 新人的选择困局 1.2 高人才密度环境下普通员工的成长效率困局 1.3 业务发展和个人成长的二元对立困局 1.4 中年打工人低费效比引发的职场生涯终结困局 二、人的本质 2.1 人的本质的定义 2.2 由“人的本质”引出的几个关键过程 2.2.1 认知指引实践&a…

Pillow 一文读懂

Pillow 简介、特点和安装 Pillow 简介 Pillow作为python的第三方图像处理库&#xff0c;提供了广泛的文件格式支持&#xff0c;强大的图像处理能力&#xff0c;主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。 PIL(Python Image Library)是python的第三方图…

IPV6协议之RIPNG

目录 前言&#xff1a; 一、RIPNG与RIP的区别 二、如何配置RIPNG 如何解决RIPNG环路问题呢&#xff1f; 控制RIPNG的选路 1、修改RIPNG默认优先级 2.配置接口附加开销值从而干涉RIPNG的选路 RIPNG拓展配置 1.RIPNG的认证 配置RIPNG进程下的IPsec认证&#xff1a; 配…

C++默认构造函数(二)

目录 构造函数补充 构造函数初始化列表的使用 赋值运算符重载函数 运算符重载函数介绍 运算符重载函数的使用 赋值运算符重载函数 赋值运算符重载函数的使用 拷贝构造函数和赋值运算符重载函数 重载前置和后置 前置 后置 重载流插入<<与流提取>> 流插…

Navicat 干货 | 探索 PostgreSQL 的外部数据包装器和统计函数

PostgreSQL 因其稳定性和可扩展性而广受青睐&#xff0c;为开发人员和数据管理员提供了许多有用的函数。在这些函数中&#xff0c;file_fdw_handler、file_fdw_validator、pg_stat_statements、pg_stat_statements_info 以及 pg_stat_statements_reset 是其中的重要函数&#x…

白学的小知识[js.事件]

一、事件的常用绑定方式 1 、行内绑定&#xff0c;语法&#xff1a; <标签 属性列表 事件"事件处理的程序" /> <button onclick"addNode();">创建节点</button> 行内绑定&#xff1a;行内绑定的方式所有的行为&#xff08;结构、样式、…

C语言:htoi十六进制转十进制

编写函数htoi(s), 把由十六进制数字组成的字符串&#xff08;包含可选的前缀0X和0x&#xff09;&#xff0c;转化为与之等价的整数值, 字符串中包含的字符可以是0 - 9&#xff0c;A - F&#xff0c;a - f // 把由十六进制数字组成的字符串(包含可选的前缀0X和0x)&#xff0c;转…

鸿蒙:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二层的属性变化是无法观察到的。这就引出了Observed/Object…

AJAX介绍使用案例

文章目录 一、AJAX概念二、AJAX快速入门1、编写AjaxServlet&#xff0c;并使用response输出字符&#xff08;后台代码&#xff09;2、创建XMLHttpRequest对象&#xff1a;用于和服务器交换数据 & 3、向服务器发送请求 & 4、获取服务器响应数据 三、案例-验证用户是否存…

由浅入深一步步了解什么是哈希(概念向)

文章目录 什么是哈希哈希函数直接定址法除留余数法 哈希冲突闭散列线性探测法二次探测法负载因子和闭散列的扩容 开散列开散列的扩容 非整形关键码 什么是哈希 我们来重新认识一下数据查找的过程&#xff1a; 在顺序结构以及平衡树中&#xff0c;记录的关键码与其存储位置之间…

【自然语言处理】统计中文分词技术(一):1、分词与频度统计

文章目录 一、词与分词1、词 vs 词素2、世界语言分类 二、分词的原因与基本原因1、为什么要分词2、分词规范3、分词的主要难点-切分歧义如何排除切分歧义利用词法信息利用句法信息利用语义信息利用语用、语境信息 4、分词的主要难点-未登录词未登录词如何识别未登录词 三、分词…

扫雷(c++题解)

题目描述 题目描述 扫雷是一种计算机游戏&#xff0c;在 世纪 年代开始流行&#xff0c;并且仍然包含在某些版本的 Microsoft Windows 操作系统中。 在这个问题中&#xff0c;你正在一个矩形网格上玩扫雷游戏。 最初网格内的所有单元格都呈未打开状态。 其中 个不同的单…

Docker入门到实践之环境配置

Docker入门到实践之环境配置 docker 环境安装 Ubuntu/Debian: sudo apt update sudo apt install docker.ioCentOS/RHEL: sudo yum install dockerArch Linux: sudo pacman -S docker如果未安装成功&#xff0c;或者env的path未设置成功&#xff0c;运行时会报错 Bash: Do…

[HackMyVM]靶场 Slowman

kali:192.168.56.104 靶机:192.168.56.132 端口扫描 # nmap 192.168.56.132 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-24 15:28 CST Nmap scan report for 192.168.56.132 Host is up (0.00066s latency). Not shown: 995 filtered tcp ports (no-response) …

NX二次开发-调内部函数创建进度条MT_create_progress_bar

一、概述 最近学习NX二次开发&#xff0c;看到NX打开装配模型或者加载模型时会显示进度条的问题&#xff0c;个人觉得很有意思&#xff0c;然后参考阿飞2018中的文章进行学习。 二、代码解析 //User Defined Header File#include <uf.h>#include <uf_ui.h>#includ…

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法 需求&#xff1a;需要一个搜索框&#xff0c;可以选择员工&#xff0c;&#xff08;员工人数多无法一次性获取&#xff0c;全部放入options中&#xff09;&#xff0c;所以需要使用搜索功能&#xff0c;而且是可以多…

redis如何保持持久性

为了保持 Redis 数据的持久性&#xff0c;你可以通过以下几种方式来实现&#xff1a; RDB 持久化&#xff1a; Redis 可以将数据集快照写入磁盘。此方法会在指定的时间间隔内生成数据集的时间点快照&#xff0c;存储到磁盘上。这种持久化方式适用于备份、恢复数据以及灾难恢复…

Linux的相关指令总结

Linux的基本命令 Linux指令是Linux操作系统的核心组成部分&#xff0c;它们为用户和管理员提供了与系统进行交互和管理的强大工具。这些指令涵盖了从基本的文件操作到复杂的系统配置和管理的各个方面。 ls指令 功能&#xff1a;用于列出指定目录中的文件和子目录名称。语法&am…