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

第4章 4.3 EF Core 的实体类配置 Data Annatation Fluent API

 4.3.1 约定大于配置

主要的约定规则:

规则 1: 数据库表名采用上下文类中对应的 DbSet 的属性名。
规则 2:数据库表列的名字采用实体类属性的名字,列的数据类型采用和实体类属性类型
兼容的类型。比如在 SQLServer 中,string 类型对应 nvarchar,long 类型对应 bigint
规则3:数据库表列的可空性取决于对应实体类属性的可空性。EFCore6中支持C#中的
可空引用类型。
规则 4: 名字为Id 的属性为主键,如果主键为short、int 或者 long 类型,则主键默认采
用自动增长类型的列。

4.3.2 Data Annatation 数据注释

数据注释:用.NET提供的Attribute对实体类、属性;等进行标注的方式来实现实体类的配置

例如表名的配置、是否可空、数据长度等的配置

4.3.3 Fluent API

Fluent API也是用来配置实体类的,和Data Annatation的大部分功能都是重叠的,切Data Annatation看起来更简单。但官方更推荐Fluent API的方式。原因有俩:

1. Fluent API能更好的进行职责分离

2. Fluent API的功能更强大,Fluent API的功能面几乎覆盖了Data Annatation且拥有更多特有的功能。

这两者可以一同使用,Fluent API的优先级高于Data Annatation。

所以常用的配置方式有两种:

1. 混合:优先使用Data Annatation,Data Annatation使用更简单。Data Annatation无法实现时再用Fluent API。

2. 单一方案:只使用Fluent API

4.3.4 Fluent API 基本配置

1. 视图与实体类映射

modeBuilder.Entity<Blog>().ToView("blogsView");

2. 排除属性映射

modeBuilder.Entity<Blog>().Ignore(b=>b.Name2);

3. 数据库表列名

modeBuilder.Entity<Blog>().Property(b=>b.BlogId).HasColumnName("blogs_id");

4. 列数据类型

builder.Property(e=>e.Title).HasColumnType("varchar(200)");

5. 主键 

6. 索引

把URL属性定义为索引

modeBuilder.Entity<Blog>().HasIndex(b=>b.Url);

7. 重载的方法

......还有很多其他配置属性

4.3.5 Fluent API 究竟流畅在哪里

书中讲了很多,核心一句话就是:Fluent API在进行实体类配置的时候可以进行链式编程,比如设置下面三个属性可以这样写:

也可以这样写:

也就是说,只要是设置返回类型的里的属性或者调用返回类型里方法,都可以一直“点点点”实现链式编程。

4.3.6 主键类型的选择并不简单

 

http://www.dtcms.com/a/35308.html

相关文章:

  • 死锁是什么
  • git 小乌龟安装包及中文包
  • 计网学习————(二)
  • 第十三:路由两个注意点:
  • web组态可视化编辑器
  • C语言函数学习笔记
  • 【js面试】JavaScript中执行栈和执行上下文是什么?
  • GraphRAG如何使用ollama提供的llm model 和Embedding model服务构建本地知识库
  • 【C++11】 并发⽀持库
  • next.js-学习2
  • Python常用的15个标准模块
  • 如何选择适合项目的自动化测试工具?
  • Linux项目自动化构建工具-make/Makefile (linux第六课)
  • DeepSeek 助力 Vue 开发:打造丝滑的文本输入框(Text Input)
  • vue框架后遗症∶被遗忘的dom操作
  • DeepSeek R1模型提示语技巧:如何高效引导AI生成优质内容
  • 具有快慢思考的语言调节机器人操作
  • VXLAN与园区网络虚拟化
  • (六)趣学设计模式 之 代理模式!
  • 分割数组的最大差值
  • 无人机实战系列(番外一)本地图像+Apple ML Depth Pro
  • 算法-数据结构-图的构建(邻接矩阵表示)
  • 图数据库Neo4j面试内容整理-约束(Constraint)
  • C++面向对象编程技术研究
  • 6.1 - UART串口数据收发环回实验
  • 代码随想录第三十八天| 322. 零钱兑换 279.完全平方数 139.单词拆分 动态规划:关于多重背包,你该了解这些!
  • 布隆过滤器:一种简单而高效的集合查询方法
  • git中,如何查看具体单个文件的log
  • 3dtiles平移旋转工具制作
  • 今日运维之-Mac笔记本python环境问题