0

0

EF Core OnModelCreating方法怎么用 EF Core模型配置入口

畫卷琴夢

畫卷琴夢

发布时间:2025-12-24 11:47:33

|

782人浏览过

|

来源于php中文网

原创

OnModelCreating 是 EF Core 模型配置的统一入口,必须在自定义 DbContext 中重写并调用 base.OnModelCreating;通过 ModelBuilder 使用 Fluent API 配置实体映射、关系、索引、种子数据等,顺序无关但建议按逻辑分组;部分简单配置可用数据注解替代,但复杂场景必须依赖 Fluent API。

ef core onmodelcreating方法怎么用 ef core模型配置入口

OnModelCreating 是 EF Core 模型配置的统一入口,所有通过 Fluent API 进行的实体映射、关系定义、索引、种子数据等配置,都必须在这个方法里完成。它在 DbContext 初始化模型时被自动调用一次,只执行一次,不参与运行时查询。

必须重写并调用 base.OnModelCreating

你需要在自定义的 DbContext 类中重写该方法,并显式调用 base.OnModelCreating(modelBuilder),否则部分默认约定或提供程序扩展(如 Identity、达梦适配器)可能失效。

  • 不调用 base 可能导致主键推断失败、序列未注册、或某些数据库特有配置丢失
  • 即使你只配关系,也建议保留这行——它是安全兜底

核心用途:用 ModelBuilder 配置模型

ModelBuilder 是 Fluent API 的操作主体,它提供链式方法对实体、属性、关系等进行声明式配置。常见场景包括:

  • 表名与列名映射:ToTable("blogs")、HasColumnName("blog_id")
  • 主键与键约束:HasKey(e => e.Id)、HasAlternateKey(e => e.Code)
  • 关系定义:HasOne/HasMany + WithOne/WithMany + HasForeignKey
  • 索引与唯一约束:HasIndex(e => e.Email).IsUnique()
  • 种子数据:HasData(new Blog { Id = 1, Name = "EF Core 入门" })
  • 值生成策略:ValueGeneratedOnAdd()、UseIdentityColumn()

配置顺序不影响最终结果

Fluent API 的调用顺序没有强制依赖。比如先配外键再配关系,或先设索引再设主键,EF Core 内部会统一解析成逻辑一致的模型。但为可读性,建议按“实体 → 属性 → 关系 → 索引 → 种子数据”分组组织代码。

趣问问AI
趣问问AI

免费可用的国内版chat,AI写作和AI对话

下载
  • 同一个实体的配置尽量集中,避免分散在多处
  • 跨实体关系(如一对多)只需在一方配置即可,另一方可省略 .WithOne/.WithMany 的 lambda 表达式
  • 若使用 IEntityTypeConfiguration 分离配置,仍需在 OnModelCreating 中调用 modelBuilder.ApplyConfigurationsFromAssembly(...)

不是所有配置都必须写在这里

部分简单映射可用数据注解替代,比如 [Table("users")]、[Column("user_name")]、[Index(nameof(Email), IsUnique = true)]。但注解能力有限:

  • 无法配置复杂关系(如多对多中间实体的外键方向)
  • 不支持条件索引、计算列、序列、删除行为等高级特性
  • 复合主键、阴影属性、拥有的实体类型只能用 Fluent API

基本上就这些。OnModelCreating 不是魔法,它只是把你的意图翻译成 EF Core 能理解的元数据模型——写得清楚,迁移才准,运行才稳。

相关专题

更多
lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

200

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

187

2025.11.08

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

324

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2066

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

346

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

250

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

315

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

400

2023.10.16

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 36.8万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号