当前位置: 首页 > news >正文

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

相关文章:

  • linux之shell脚本基础
  • DEYOv2: Rank Feature with Greedy Matchingfor End-to-End Object Detection
  • 无线局域网——wlan
  • 【Python 48小时速成 8】函数
  • Spring如何解决循环依赖?
  • macOS 通过 MacPorts 正确安装 MySQL 同时解决无法连接问题
  • postgresql查看数据库占用空间大小
  • 《如何使用C语言去下三子棋?》
  • qt+ffmpeg 实现音视频播放(二)之音频播放
  • 【UE5】动画蒙太奇简述
  • K8S日志收集方案-EFK部署
  • 第五篇:数字视频广告格式概述 - IAB视频广告标准《数字视频和有线电视广告格式指南》
  • 流畅的 Python 第二版(GPT 重译)(六)
  • 如何与手机共享笔记本电脑的互联网?这里提供详细步骤
  • 回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测
  • [NodeJS] 关于Buffer
  • 【mysql】环境安装、服务启动、密码设置
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Consul Config 使用Git做版本控制的实现
  • fetch 从初识到应用
  • JavaScript对象详解
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Tornado学习笔记(1)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 浮动相关
  • 后端_MYSQL
  • 利用jquery编写加法运算验证码
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • hi-nginx-1.3.4编译安装
  • Spring Batch JSON 支持
  • ​用户画像从0到100的构建思路
  • # Apache SeaTunnel 究竟是什么?
  • #HarmonyOS:基础语法
  • #pragma once
  • $ git push -u origin master 推送到远程库出错
  • $.ajax()方法详解
  • (BFS)hdoj2377-Bus Pass
  • (HAL库版)freeRTOS移植STMF103
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (四) Graphivz 颜色选择
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .FileZilla的使用和主动模式被动模式介绍
  • .htaccess 强制https 单独排除某个目录
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)