前言

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

EF/EF Core介绍

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET 的现代对象数据库映射器。它支持 LINQ 查询、更改跟踪、更新和架构迁移。EF Core 通过提供程序插件 API 与 SQL Server、Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他数据库一起使用。(微软官方出品)。

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

GitHub地址:https://github.com/dotnet/efcore

.NET ORM如何选择?

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

EF开发的三种模式

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

  1. 代码优先模式(Code First)
  2. 数据库优先模式(Database First)
  3. 模型优先模式(Model First)

代码优先模式(Code First)

代码优先模式是指先编写对于数据库表的实体类和数据库上下文类,然后通过 EF 工具根据代码创建表、生成数据库表结构、映射文件等。

优点

  1. 这种模式适用于开发人员更习惯于使用代码管理数据模型的场景,同时也能够更灵活地定义数据模型。
  2. EF提供了自动迁移功能,能够根据实体类的变化自动更新数据库结构,简化了数据库迭代开发的过程。

缺点

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

数据库优先模式(Database First)

数据库优先模式是指首先要创建好数据库,然后将使用 Visual Studio 中包含的实体框架设计器来创建模型(项目=>添加新项=>从左侧菜单中选择“数据”,然后选择“ADO.NET 实体数据模型”=>实体数据模型向导(添加数据库访问地址)=>选择“从数据库生成”,然后单击“下一步”),最后生成EDMX 文件(.edmx 扩展名)。

优点

  1. 通过已有的数据库结构快速生成数据模型,减少了手动编写模型类的时间和工作量,加快了开发速度。
  2. 适用于已有数据库的项目,无需从头设计数据模型,便于与现有数据库进行集成开发。
  3. 当数据库结构发生变化时,可以通过更新数据模型来保持模型与数据库的一致性,方便维护。

缺点

  1. 自动生成的模型类可能包含过多的属性和关联,导致模型类过于庞大和复杂,不利于维护和理解。
  2. 自动生成的模型类可能并不是最优化的数据访问方式,可能导致性能上的一些问题,需要额外优化。

模型优先模式(Model First)

模型优先模式介于数据库优先模式和代码优先模式两者之间(结合体)。在模型优先模式中,首先定义实体数据模型(选择“空模型”并单击“完成”),然后通过该模型生成数据库结构。

优点

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

缺点

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

最后总结

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

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
  • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群

企业应用开发中.NET EF常用哪种模式?的更多相关文章

  1. Dubbo在开发中的一些常用配置

    介绍Dubbo在开发中的一些常用配置,文中内容主要参考dubbo文档配置和示例两节,详细可移步访问  传送站 1. 属性配置方法及加载顺序 属性常用配置方法主要有三种: 第一种是通过启动时在虚拟机参数 ...

  2. Java开发中的eclispe常用快捷键&全部快捷键

    Java开发中的eclispe常用快捷键&全部快捷键 Ctrl+1 快速修复(经典快捷键)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ ...

  3. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  4. 在Android开发中,定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...

  5. Android开发中无处不在的设计模式——动态代理模式

    继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...

  6. Java项目开发中实现分页的三种方式一篇包会

    前言   Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...

  7. EF框架之三种模式

    使用EF之前必须要对EF有个宏观的了解.学习任何一种技术都要像门卫一样问几个问题. 第一,它是谁? 第二,从哪里来? 第三,到哪里去? 默念一遍:不谋全局者,不足谋一域. Entity Framewo ...

  8. 第十四节: EF的三种模式(四) 之 原生正宗的 CodeFirst模式的默认约定

    一. 简介 1. 正宗的CodeFirst模式是不含有edmx模型,需要手动创建实体.创建EF上下文,然后生成通过代码来自动映射生成数据库. 2. 旨在:忘记SQL.忘记数据库. 3. 三类配置:On ...

  9. iOS xib中TableView创建的2种模式

    在xcode 5.0中 用xib编辑tableview有2种模式,见下图 其中,dynamic prototype 动态原型 表示tableview会询问它指定的 data source获取数据,如果 ...

  10. pycharm中脚本执行的3种模式(unittest框架、pytest框架、普通模式)

    背景知识,某次使用HTMLTestRunner的时候,发现一直都无法导出报告,后来查询资料发现了一些坑,现在整理一下来龙去脉. 一:pycharm默认的是pytest框架去执行unittest框架的测 ...

随机推荐

  1. 【Windows】KMS 激活命令记录

    目录 KMS 服务器激活 Office.Visio 推荐使用 office tool plus 部署并配置 KMS 激活 什么是 KMS? KMS 正版与否的区别 总结 KMS 服务器激活 利用 KM ...

  2. 使用DWS集群,用户被锁定如何解锁

    本文分享自华为云社区<[如何保证你的DWS数据更安全]使用DWS集群,用户被锁定如何解锁?>,作者:Shirley_Dou . 一.管理员用户被锁定,怎么破?gsql: FATAL: Th ...

  3. Go 并发编程 - Goroutine 基础 (一)

    基础概念 进程与线程 进程是一次程序在操作系统执行的过程,需要消耗一定的CPU.时间.内存.IO等.每个进程都拥有着独立的内存空间和系统资源.进程之间的内存是不共享的.通常需要使用 IPC 机制进行数 ...

  4. 《小白WEB安全入门》02. 开发篇

    @ 目录 初识HTML潜在漏洞 初识CSS潜在漏洞 初识JS潜在漏洞 初识后端潜在漏洞 后端能做什么 后端种类 后端框架 潜在漏洞 本系列文章只叙述一些超级基础理论知识,极少有实践部分 本文涉及到的语 ...

  5. Kali-Linux-配置开发环境

    本文主要讲解JDK.SDK.eclipse-adt.android studio.cpu模式TensorFlow 的安装配置.update:2019-08-30 03:31:46 JDK 当前系统jd ...

  6. jenkins部署及gitlab联调

    jenkins部署及gitlab联调 目录 jenkins部署及gitlab联调 一.jenkins安装 1.环境优化 2.安装jdk java 环境 3.下载jenkins 4.启动Jenkins服 ...

  7. 【SpringBoot实战】开发入门--快速创建springboot程序

    前言 本片博客记录快速创建springboot工程的使用spring initializr创建.开发环境JDK1.8.IDEA.maven. SpringBoot 优点 可快速构建spring应用 直 ...

  8. 「loj - 3489」「joisc 2021 day 1」Food Court

    link. 感觉好久没写过题解了, 这就是永远在骚动的得不到吧. 星尘 infinity 真的非常行, 就算是 ja voicebase 都不知道吊打那群日 v 多少圈. 我推荐你们都去听一听. ch ...

  9. 8.2 BeingDebugged

    BeingDebugged 是Windows系统PEB结构体中的一个成员,它是一个标志位,用于标识当前进程是否正在被调试.BeingDebugged的值为0表示当前进程未被调试,值为1表示当前进程正在 ...

  10. Codechef - Longest AND Subarray(位运算)

    题目大意   给定一个正整数N,其序列为[1, 2, 3, ..., N],找到一个长度最大的连续子列,使得其所有元素取与运算的结果为正(最终输出只需要输出最大长度即可). 思路   刚开始可能并不好 ...