实体框架EF(Entity Framework)简介

实体框架EF(Entity Framework)简介

文章目录

  • 实体框架EF(Entity Framework)简介
    • 一、概述
    • 二、O/R Mapping是什么
      • 采用O/R Mapping带来哪些好处
    • 三、Entity Framework架构
      • 3.1 下图展示了Entity Framework的整体架构
      • 3.2 Entity Framework架构详解
        • EDM (Entity Data Model)
        • LINQ to Entitis
        • Entity SQL
        • Object Service
        • Entity Client Data Provider(实体客户端数据提供器)
        • ADO.Net Data Provider
    • 四、Entity Framework三种开发模式
      • 4.1 Code First (代码优先)
      • 4.2 Model First (模型优先)
      • 4.3 Database First (数据库优先)
    • 五、Entity Framework的优势和缺点

在这里插入图片描述

一、概述

Entity Framework是微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。Entity Framwork提供变更追踪,唯一性约束,惰性加载、查询事务等功能。开发人员使用Linq语言,对数据库操作如同操作Object对象一样省事。

Entity Framework使用场景:

  1. 从数据库生成Class类。
  2. 由实体类生成数据库表结构。
  3. 通过数据库可视化器设计数据库,同时生成实体类。

二、O/R Mapping是什么

ORM-Object/Relational Mapper,即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。ORM是将数据存储从域对象自动映射到关系数据库的工具。ORM主要包含3个部分:域对象,关系数据库对象、映射关系。ORM使类提供自动化CRUD,使开发人员从数据库API和SQL中解放出来。

采用O/R Mapping带来哪些好处

  1. 在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像操作对象一样,O/R Mapping工具会自动地将对象的操作转换为SQL语句操作。

  2. 提高学习和开发效率,极大的降低开发成本。

  3. 简化代码,减少BUG数量。

    通过建立ORM框架,能够大量减少程序开发代码,开发数据层就比较简单,大大减少了出错机会。

  4. 简化测试。只需测试业务逻辑的类和行为,避免重复的JDBC测试

  5. 提高性能 对象级缓存( 缓存对象及其关系 )可以避免不必要的数据库存取,极大的提高数据读写的性能。我们也可以节省用于系统调优的时间和工作量。

  6. 隔离数据源,可以很方便的转换数据库 ORM可以将业务层与实际的数据存储隔开,开发人员不需要关心实际存储的方式,如果我们需要把SQL Server数据库换成ORACLE数据库,只需要修改配置文件就可,业务逻辑代码完全不需要修改。

三、Entity Framework架构

3.1 下图展示了Entity Framework的整体架构

3.2 Entity Framework架构详解

  • EDM (Entity Data Model)

    EDM包含三个主要部分:概念模型、映射和存储模型

    • 概念模型

    概念模型包含模型类和它们之间的关系。这个将独立于你的数据库表设计

    • 存储模型

    存储模型是数据库设计模型,它包括表、视图、存储过程和它们的关系及键

    • 映射

    映射由关于概念模型是怎样和存储模型映射的的信息组成

  • LINQ to Entitis

LINQ-to-Entities (L2E)是一个写对象模型查询的一个查询语言。它返回实体,这些实体被定义在概念模型中。你可以在这里使用 LINQ 技能。

  • Entity SQL

Entity SQL是另外一种类似于 LINQ to Entity 的查询语言。然而,它是一种比 L2E 难得多了并且开发者还要单独学习它

  • Object Service

对象服务是一个访问数据库数据并且返回数据的主要入口点。对象服务负责具体化,这是一个将从实体客户端数据提供器(下一层)返回的数据转换成对象结构的一个过程。

  • Entity Client Data Provider(实体客户端数据提供器)

这一层的主要职责是把 LINQ-to-Entities 或者 Entity SQL 查询转换成能被底层数据库理解的 SQL 查询。它和 ADO.Net 数据提供器通信,数据提供器依次地发送数据到数据库或者从数据库中检索数据。

  • ADO.Net Data Provider

这一层使用标准的 ADO.Net 和数据库通信

四、Entity Framework三种开发模式

Entity Framework支持3种开发方式,分别是:Code FirstModel FirstDatabase First

4.1 Code First (代码优先)

Code First模式是一种很cool的模式,手动创建POCO(全称Plain Old Class Object,也是最基础的CLR Class,实体类)。数据层DbContext及映射关系,通过Database.SetInitializer(本次采用dbcontext.Database.CreateIfNotExists方法)生成数据库,自动生成方便快速、更易维护、非常灵活。

4.2 Model First (模型优先)

Model First我们称之为“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,使用ModelFirst的前提是,应用程序还没有创建相应的数据库,咱们可以用Visual Studio通过设计系统相关的数据模型来生成数据库结构。当然和DataBase First的区别也是显而易见,可以说是DataBaseFirst的逆向工程。

4.3 Database First (数据库优先)

简单、方便,但是当项目大了之后会非常痛苦。

五、Entity Framework的优势和缺点

优点:简单说就是Entity Framework省事,做业务系统,管理系统会减少很多代码,程序员可以更关注业务实现本身。

缺点:当处理大数据量和高并发时,由于Entity Framework是自动化程度高,所以在自定义优化这肯定一般,所以处理大数据量和高并发时,需要用最原始的访问数据库技术一点一点,一步一步的进行手动优化,保证每一步都在掌握之中,而不是依靠自动化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习-08】参数调优宝典:网格搜索与贝叶斯搜索等攻略

超参数是估计器的参数中不能通过学习得到的参数。在scikit-learn中,他们作为参数传递给估计器不同类的构造函数。典型的例子有支持向量分类器的参数C,kernel和gamma,Lasso的参数alpha等。 ​ 在超参数集中搜索以获得最佳cross validation交叉…

Ant Design Vue和VUE3下的upload组件使用以及文件预览

Ant Design Vue和VUE3下的upload组件使用以及文件预览 文章目录 Ant Design Vue和VUE3下的upload组件使用以及文件预览一、多文件上传1.需求2.样例3.代码 二、单文件上传1. 需求2. 样例3.代码 二、多文件上传产生的时间超时问题三、文件系统名称更改1. 修改文件index.html2. 修…

现货大宗商品交易系统开发及平台需要哪些资质

现货大宗商品交易平台需要一系列资质和条件来确保其合法、合规运营,保障投资者的权益和市场的稳定。以下是现货大宗商品交易平台需要的主要资质和条件: 公司注册与法人资格:平台需要依法办理工商注册登记手续,并具有法人资格。这…

硬核分享|如何使用AI根据一段文字描述来生成图片

硬核分享|如何使用AI根据一段文字描述来生成图片_哔哩哔哩_bilibili 最近许多人询问关于AIGC生成图片工具的推荐问题,深感寻找一款好用的AIGC生成图片工具在当今信息爆炸时代的重要性。现在,为大家分享几款好用的AIGC生成图片工具,一起探索吧…

【C++】vector容器初步模拟

送给大家一句话: 努力一点,漂亮—点,阳光一点。早晚有一天,你会惊艳了时光,既无人能替,又光芒万丈。 vector容器初步模拟 1 认识vector开始了解底层实现 2 开始实现成员变量构造函数 析构函数尾插迭代器插入…

FX110网:FCA揭露Admirals的克隆实体!冒充正规平台行骗

近日,英国金融行为监管局(FCA)曝光了多个网址,揭露克隆实体fxsadmiral / admiral-fx / admiralsfx。这些克隆公司复制授权公司Admiral Markets UK Ltd的重要信息,试图让人们相信他们的公司是真实的。FCA本次披露的克隆…

记录西门子200:PUT和GET通讯测试

GET/PUT:S7-200SMART之间专有通讯协议。 准备两台Smart-PLC,这里使用的ST60和CR40。外加一个交换机。 CR40的地址设置是:192.168.2.1 用来读 ST60的地址设置是:192.168.2.2 用来写 打开软件,选择CPU-CR4配…

深入探索Java并发库(JUC)中的ReentrantReadWriteLock

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在Java并发编程的世界中,锁是一种用于同步访问共享资源的机制。Java并发库(JUC)为我们提供了多…

简易指南:国内ip切换手机软件怎么弄

在网络访问受到地域限制的情况下,使用国内IP切换手机软件可以帮助用户轻松访问被屏蔽的内容,扩展网络体验。以下是虎观代理小二分享的使用国内IP切换手机软件的简易指南。并提供一些注意事项。 如何在手机上使用国内IP切换软件 步骤一:选择I…

PHP连接达梦数据库

PDO是一种在PHP中连接数据库的接口,可以通过PDO接口使用PHP连接达梦数据库。 1、安装PHP环境 检查当前环境是否安装PHP [rootlocalhost ~]# php -v 当前环境并未安装PHP,需要进行安装,选择安装PHP7.3版本。 2、安装 epel-release源和源管…

工程信号的去噪和(分类、回归和时序)预测

🚀【信号去噪及预测论文代码指导】🚀 还为小论文没有思路烦恼么?本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号(回归、时序和分类)预测算法,致力于为您提供最精确、…

【Python爬虫】网络爬虫:信息获取与合规应用

这里写目录标题 前言网络爬虫的工作原理网络爬虫的应用领域网络爬虫的技术挑战网络爬虫的伦理问题结语福利 前言 网络爬虫,又称网络爬虫、网络蜘蛛、网络机器人等,是一种按照一定的规则自动地获取万维网信息的程序或者脚本。它可以根据一定的策略自动地浏…

常用的6个的ChatGPT网站,国内可用!

GPTGod 🌐 链接: GPTGod 🏷️ 标签: GPT-4 免费体验 支持API 支持绘图 付费选项 📝 简介:GPTGod 是一个功能全面的平台,提供GPT-4的强大功能,包括API接入和绘图支持。用户可以选择免…

【阿里魔搭】modelscope包下载安装

最终解决方案:使用源码安装modelscope 这里写目录标题 问题描述:pip安装包冲突安装步骤 问题描述:pip安装包冲突 一开始的是在3.11的虚拟环境下使用命令行pip install "modelscope[nlp]" -f https://modelscope.oss-cn-beijing.al…

DUSt3R:简化三维重建

3D 重建是从二维 (2D) 图像创建对象或场景的 3D 虚拟表示的任务,可用于模拟、可视化或本地化等多种目的。 它广泛应用于计算机视觉、机器人和虚拟现实(VR)等多个领域。 在基本设置中,3D 重建方法输入一对图像 I1 和 I2&#xff0c…

字体测试集:选取、应用与兼容性指南

1. 字体测试集 本人非专业字体工作者,字体测试集为个人经验总结整理,仅供参考 那时,天下人的口音、言语都是一样。 南去經三國,東來過五湖 南去经三国,东来过五湖 永东国酬爱郁灵鹰袋 0Oo1lI ga The quick brown fox j…

6个免费的ChatGPT网站

AI 大模型的出现给时代带来了深远的影响: 改变了产业格局:AI 大模型的发展推动了人工智能技术在各行业的广泛应用,改变了传统产业的运作方式,促进了新兴产业的崛起,如智能驾驶、医疗健康、金融科技等。提升了科学研究…

微软发布首款AI PC ,产业链有望迎来新一轮量价齐升

3月21日晚,微软举办主题为“办公新时代”的线上新品发布会,发布Surface Pro 10和Surface Laptop 6,新品将搭载基于英特尔酷睿Ultra或高通骁龙X Elite的处理器,配备新一代NPU,以增强AI性能。 这两款AI PC将支持“AI Exp…

土地利用的时序建模

1、LULC 模型的现状 最近的土地利用和土地覆盖 (LULC) 建模进展来自两种方法。 在一种方法中,现有模型适用于 LULC,而在另一种方法中,模型架构是针对 LULC 明确设计的。 随着大型基础模型的兴起,人工智能和深度学习取得了重大进…

数据结构 二叉树 力扣例题AC——代码以及思路记录

LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录,请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …