0

0

C# 实体框架Code First方法 C# EF Core如何使用Code First

煙雲

煙雲

发布时间:2026-01-28 09:53:22

|

285人浏览过

|

来源于php中文网

原创

Code First是以C#实体类为唯一数据模型源头、由EF Core自动推导数据库结构的开发模式,需遵守属性可写性、主键命名、导航属性virtual等约束,通过Fluent API配置关系,严格按三步执行迁移,并禁用EnsureCreated()。

c# 实体框架code first方法 c# ef core如何使用code first

Code First 不是“先写代码再生成数据库”的简单流程,而是以 C# 类(实体)为唯一数据模型源头,由 EF Core 自动推导并管理数据库结构的开发模式。它要求你放弃手动建表思维,把注意力放在领域对象设计和迁移生命周期上。

定义实体类时必须注意的三个约束

EF Core 会根据约定自动映射属性,但一旦违反默认规则,就会导致迁移失败或运行时报错 InvalidOperationException

  • public 属性且有 getset 访问器才会被识别为字段;private set 可接受,但 readonly 字段或只读属性不会映射
  • 主键命名必须是 Id{ClassName}Id(如 UserId),否则需用 [Key] 显式标记
  • 导航属性(如 public ICollection Orders { get; set; })必须声明为 virtual(启用延迟加载时)或使用 Include() 显式加载,否则查询时为空

DbContext 子类中如何正确配置关系

仅靠属性命名无法表达所有关系类型(如一对多、多对多、自引用)。必须重写 OnModelCreating 方法,用 Fluent API 补充约定之外的逻辑。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity()
        .HasOne(o => o.User)
        .WithMany(u => u.Orders)
        .HasForeignKey(o => o.UserId);
modelBuilder.EntityzuojiankuohaophpcnUseryoujiankuohaophpcn()
    .HasIndex(u =youjiankuohaophpcn u.Email)
    .IsUnique();

modelBuilder.EntityzuojiankuohaophpcnPostTagyoujiankuohaophpcn()
    .HasKey(pt =youjiankuohaophpcn new { pt.PostId, pt.TagId });

}

常见疏漏:HasOne().WithMany() 忘记配对反向导航属性,或在多对多中间表中没用 HasKey 显式指定复合主键,会导致迁移生成错误的外键约束。

MakeSong
MakeSong

AI音乐生成,生成高质量音乐,仅需30秒的时间

下载

执行迁移时最容易出错的三步操作

迁移不是“一键生成”,而是一系列可审查、可回滚的变更脚本。跳过其中任意一步,都可能让本地数据库与代码模型脱节。

  • 修改实体后,必须先运行 dotnet ef migrations add InitialCreate(或带描述的名称),生成 Migrations/xxx_InitialCreate.cs —— 这个文件不能手动改,它是 EF Core 推导出的“差量”
  • 检查生成的 Up(MigrationBuilder migrationBuilder) 方法是否符合预期,比如字段类型是否正确(string 默认映射为 nvarchar(max),常需用 HasMaxLength(50) 限制)
  • 执行 dotnet ef database update 才真正应用变更;若想回退,用 dotnet ef database update PreviousMigrationName,而不是删掉迁移文件

生产环境禁用 Database.EnsureCreated()

这个方法会直接删库重建,在开发阶段看似方便,但一旦误部署到测试或生产环境,后果不可逆。

替代方案只有且必须是迁移:

  • 首次部署:运行 dotnet ef database update 应用全部待迁移
  • 后续更新:每次发布前生成新迁移,上线时执行 update 到最新版本
  • 若需初始化空库,可用 dotnet ef migrations script --idempotent 生成兼容性脚本,供 DBA 审核执行

真正难的不是写第一个 DbContext,而是让团队所有人理解:迁移文件是代码的一部分,要进 Git、要 Code Review、要和实体变更保持原子性 —— 否则迟早遇到 Microsoft.Data.SqlClient.SqlException: Invalid object name 'Users' 这类运行时错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

443

2023.08.02

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

724

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

554

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

267

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

557

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

519

2024.04.09

discuz database error怎么解决
discuz database error怎么解决

discuz database error的解决办法有:1、检查数据库配置;2、确保数据库服务器正在运行;3、检查数据库表状态;4、备份数据;5、清理缓存;6、重新安装Discuz;7、检查服务器资源;8、联系Discuz官方支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.11.20

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

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

358

2023.06.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

31

2026.01.28

热门下载

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

精品课程

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

共21课时 | 3.1万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

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

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