实体框架EF(Entity Framework)简介

news2024/9/21 22:52:46

实体框架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是自动化程度高,所以在自定义优化这肯定一般,所以处理大数据量和高并发时,需要用最原始的访问数据库技术一点一点,一步一步的进行手动优化,保证每一步都在掌握之中,而不是依靠自动化。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STL中 function 源码解析

1. function 本文基于 GCC 9.4 function 的作用就是将各种仿函数的调用统一起来; 1.1 类中非静态成员函数指针为什么是16字节 auto cptr &A::myfunc; 类中非静态成员函数 ,其类型为 void (A::*)(int) auto rptr print_num; 普通函数对应汇…

MyBatis-Plus 实用工具:SqlHelper 让你的数据库操作更得心应手

一、SqlHelper是什么? SqlHelper 是MyBatis-Plus的一款SQL 辅助工具类,提供了一些常用的方法,简便我们的操作,提高开发效率。文档 二、示例代码 public class SqlHelperDemo {public static void main(String[] args) {// 示例…

【spring】@Lazy注解学习

Lazy介绍 Lazy 注解是一个配置注解,用于指示 Spring 容器在创建 bean 时采用延迟初始化的策略。这意味着,除非 bean 被实际使用,否则不会被创建和初始化。 在 Spring 框架中,默认情况下,所有的单例 bean 在容器启动时…

运用YOLOv5实时监测并预警行人社交距离违规情况

YOLO(You Only Look Once)作为一种先进的实时物体检测算法,在全球范围内因其高效的实时性能和较高的检测精度受到广泛关注。近年来,随着新冠疫情对社交距离管控的重要性日益凸显,研究人员开始将YOLO算法应用于社交距离…

关于Count,FPKM,TPM,RPKM等表达量的计算及转换 | 干货

原文链接:关于Count,FPKM,TPM,RPKM等表达量的计算及转换 | 干货 写在前面 今天使用count值转化TPM,或是使用FPKM转换成TPM。这样的教程,我们在前面已经出国一起相对比较详细的教程了,一文了解Count、FPKM、RPKM、TPM | 相互间的转化,在这个教程中,我们也归纳了各个数…

【力扣hot100】128.最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出:4 解…

DMA的定义和作用

在计算机系统中,DMA(Direct Memory Access,直接内存访问)是一种用于提高数据传输效率的重要技术。本文将介绍DMA的定义、原理和作用,以及它在计算机系统中的重要性。 以下是我整理的关于嵌入式开发的一些入门级资料&a…

app开发中HBuilderX运行模拟器 配置模拟器手册

1.首先打开HBuilder 然后点击,左上角运行 2.点击运行到手机或模拟器内的ADB路径设置(A) 3. adb配置你模拟器的 adb.exe路径端口号配置你模拟器的端口号 我这里使用的逍遥模拟器所以 | 21503 端口 | 手机模拟器名称21503 端口逍遥模拟器21503夜神模拟器62001网易mumu模拟器7…

点餐小程序php毕设项目

主要技术框架: 主要功能模块: 商品管理 订单管理 用户管理 优惠券管理 商品分类管理 评论管理 轮播图管理 截图 获取源码 https://blog.lusz.top/article?article_id-2

Talk|Mila研究所蒙特利尔大学刘圳:三维表征和三维网格的重建与生成

本期为TechBeat人工智能社区第580期线上Talk。 北京时间3月21日(周四)20:00,Mila研究所&蒙特利尔大学博士生—刘圳的Talk已经准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “三维表征和三维网格的重建与生成”,向大家系统地介…

【软考】生成树

目录 1. 概念2. 图解3. 例题3.1 例题1 1. 概念 1.对于有n个顶点的连通图,至少有n-1条边,而生成树中恰好有n-1条边2.连通图的生成树是该图的极小连通子图3.若在图的生成树中任意加一条边,则必然形成回路4.图的生成树不是唯一的5.从不同的顶点…

GPU云服务器的优势和应用

GPU即图形处理器,是一种高性能计算加速器,主要用于处理复杂的图像、视频等。GPU云服务器,指的是在云计算环境下,通过云平台提供GPU计算能力的虚拟服务器。随着科技的迅猛发展,科技领域对其的讨论和应用也日益热烈、广泛…

ios symbolicatecrash 符号化crash

一、准备 1.1 .crash 文件获取 设备连接电脑打开XCode, 依次 XCode -> Windows -> Device and Simulator -> View Device Logs找到 (对应app名+时间点) -> 右键 Export Log1.2 .dSYM 和 .app 文件获取 .dSYM是十六进制函数地址映射信息的中转文件,调试的symbols…

【Leetcode】top 100 链表

基础知识补充 单向链表结构:item存储数据 next指向下一结点地址 head保存首地址 class Node(object): # 创建结点def __init__(self, item): self.item item # item存放数据元素self.next None # next是下一个…

人才测评三要素:需求、量表和在线工具

人才测评在企业招聘,和企业内部测评,团队优化,团队建设,晋升考评中存在大量的普遍的应用,对于公司财力足够的情况,完全可以把人才测评的活外包给专业的测评机构,而对于大量的中小企业来说&#…

MyBatis3源码深度解析(十九)MyBatis日志实现

文章目录 前言第七章 MyBatis日志实现7.1 Java日志体系7.1.1 常用日志框架7.1.2 Java日志发展史7.1.3 日志接口与日志实现的绑定 7.2 MyBatis日志实现7.2.1 Log接口7.2.2 LogFactory工厂7.2.3 MyBatis日志自动查找7.2.4 MyBatis日志类型配置 7.3 小结 前言 日志是Java应用中必…

VSCode创建用户代码片段-案例demo

示例 - 在线生成代码片段 Vue3代码片段 {"vue3": {scope": "javascript,typescript,html,vue","prefix": "vue3","body": ["<template>","$1","</template>",""…

基于 SemiDrive E3640 Gateway SSDK3.0 Sent 测试

一、 前言 SENT 全称&#xff1a;Single Edge Nibble Transmission&#xff0c;中文名称为&#xff1a;单边半字传输协议&#xff0c;是 SAE 推出的一种点对点的、单向传输的方案&#xff0c;被用于车载传感器和电子控制单元&#xff08;ECU&#xff09;之间的数据传输。SENT(S…

SSC9211_USB-CAM解决方案

一、方案描述 SSC9211是一种用于USB-CAM应用程序跟场景的高度集成的SOC产品。平台本身基于ARM层-A7双核&#xff0c;内置16位&#xff0c;64M的DDR2&#xff0c;集成了图像传感器接口、高级ISP、高性能JPEG编码器和其他丰富的外设接口。支持单&#xff0c;双 MIPI sensor方案&…

阻塞赋值与非阻塞赋值

1.原理 一个寄存器可以实现延迟一拍的效果。 可以看出输出out和中间寄存器in_reg确实 和输入in相差一拍&#xff0c;也就是一个时钟周期。 而out和in_reg没有延迟一拍是因为使用的是阻塞赋值。右边发生变化&#xff0c;左边立刻变化。 使用非阻塞赋值。 可以看到中间变量In_r…