写点什么

企业应用开发中.NET ORM EF 常用哪种模式?

作者:追逐时光者
  • 2025-10-18
    广东
  • 本文字数:2003 字

    阅读完需:约 7 分钟

前言

本篇文章来源于DotNetGuide技术社区微信交流小伙伴的提问:在企业应用开发中.NET ORM EF常用哪种模式进行开发?今天我们一起来了解一下 EF 开发的三种模式。

EF 介绍

Entity Framework(EF)是一种新式对象关系映射器,可用于跨各种数据库(包括 SQL 数据库(本地和 Azure)、SQLite、MySQL、PostgreSQL 和 Azure Cosmos DB,使用 .NET(C#)构建干净、可移植和高级的数据访问层。 它支持 LINQ 查询、更改跟踪、更新和架构迁移。

  • 官方文档教程:https://docs.microsoft.com/zh-cn/ef

  • GitHub 地址:https://github.com/dotnet/ef6

什么是 ORM,有什么作用?

ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。它解决了对象和关系型数据库之间的数据交互问题,ORM 的作用是在关系型数据库和业务实体对象之间建立映射关系,这样我们在具体的操作业务对象的时候就不需要再去和复杂的 SQL 语句打交道,只需简单的操作对象的属性和方法。

.NET ORM 如何选择?

假如你到现在还不知道该选择哪种 ORM 来进行.NET 应用的开发,不妨先看看下面的这两篇文章,相信对你会有所帮助。

EF 开发的三种模式

这三种模式都是用于定义和管理数据模型的方式,但是它们的实现方式不同,适用于不同的场景。

  • 代码优先模式(Code First)

  • 数据库优先模式(Database First)

  • 模型优先模式(Model First)

代码优先模式(Code First)

代码优先模式(Code First)允许开发者先定义实体类和数据库上下文类,然后通过 EF 迁移等工具自动生成数据库表结构和映射文件,确保数据库与应用程序代码保持同步。

优点

  • 这种模式适用于开发人员更习惯于使用代码管理数据模型的场景,同时也能够更灵活地定义数据模型。

  • EF 提供了自动迁移功能,能够根据实体类的变化自动更新数据库结构,简化了数据库迭代开发的过程。

缺点

  • 当数据模型发生变化时,开发人员还需要手动修改代码并执行数据迁移操作。因此,在一些情况下,代码工作可能会相对繁琐,特别是在处理复杂的数据模型或频繁变更的情况下。

  • 学习成本需掌握迁移命令、Fluent API 配置等高级特性。

数据库优先模式(Database First)

数据库优先模式(Database First)允许开发者从现有数据库对模型实施反向工程。模型存储在 EDMX 文件(.edmx 扩展名)中,可以在实体框架设计器中查看和编辑。你在应用程序中与之交互的类是从 EDMX 文件自动生成的。

优点

  • 通过已有的数据库结构快速生成数据模型,减少了手动编写模型类的时间和工作量,加快了开发速度。

  • 适用于已有数据库的项目,无需从头设计数据模型,便于与现有数据库进行集成开发。

  • 当数据库结构发生变化时,可以通过更新数据模型来保持模型与数据库的一致性,方便维护。

缺点

  • 自动生成的模型类可能包含过多的属性和关联,导致模型类过于庞大和复杂,不利于维护和理解。

  • 自动生成的模型类可能并不是最优化的数据访问方式,可能导致性能上的一些问题,需要额外优化。

模型优先模式(Model First)

模型优先模式(Model First)允许开发者使用实体框架设计器创建新模型,然后从该模型生成数据库架构。模型存储在 EDMX 文件(.edmx 扩展名)中,可以在实体框架设计器中查看和编辑。你在应用程序中与之交互的类是从 EDMX 文件自动生成的。

优点

使用可视化工具,开发人员可以直观地设计数据模型,通过拖放和配置属性来定义实体和关系,从而提高开发效率。

缺点

操作步骤比较繁琐,对于复杂的数据模型,使用可视化工具进行设计和管理可能会变得困难。当模型变得庞大和复杂时,可视化工具的性能和易用性可能会受到影响。

最后总结

上面我们通过对 EF 三种开发模式的简单概述,可以看出代码优先模式(Code First)和数据库优先模式(Database First)是比较适合企业应用开发的,因为这两种方式更符合我们实际开发的使用模式。那么具体用哪一种,这就需要根据你自己项目的复杂度和团队使用习惯来衡量了,假如你有不同的见解欢迎留言。

参考文章

  • https://learn.microsoft.com/zh-cn/ef/ef6/modeling/designer/workflows/database-first

  • https://learn.microsoft.com/zh-cn/ef/ef6/modeling/designer/workflows/model-first

DotNetGuide 编程学院

DotNetGuide 编程学院是一个专注于 C#/.NET/.NET Core 学习、工作、面试干货和实战教程分享的知识星球!当然这里不仅仅只有 C#/.NET/.NET Core 还有前端、云原生(Docker,K8s)、分布式,微服务、实用工具、学习书籍、AIGC、AI 赋能、求职和招聘资讯、热点资讯等多个领域,我们致力于构建一个积极向上、和谐友善的.NET 技术交流、学习平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

大姚发放了 100 张 DotNetGuide 编程学院知识星球 68 元新人立减优惠券,有兴趣的小伙伴可以领券加入(当前应该是星球最优惠的阶段),加入后如果感觉不值得,3 天内知识星球 APP 右上角退出,直接全额退款,无任何套路!



发布于: 刚刚阅读数: 5
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
企业应用开发中.NET ORM EF常用哪种模式?_C#_追逐时光者_InfoQ写作社区