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

相关文章:

实体框架EF(Entity Framework)简介

实体框架EF(Entity Framework)简介 文章目录 实体框架EF(Entity Framework)简介一、概述二、O/R Mapping是什么采用O/R Mapping带来哪些好处 三、Entity Framework架构3.1 下图展示了Entity Framework的整体架构3.2 Entity Framew…...

使用CUDA 为Tegra构建OpenCV

返回:OpenCV系列文章目录(持续更新中......) 上一篇:MultiArch与Ubuntu/Debian 的交叉编译 下一篇:在iOS中安装 警告: 本教程可能包含过时的信息。 使用CUDA for Tegra 的OpenCV 本文档是构建支持 CUD…...

YoloV8改进策略:BackBone改进|PKINet

摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…...

如何在Linux系统部署Dupal CMS结合内网穿透实现无公网IP访问web界面

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&a…...

小巧玲珑的SQLite

SQLite是桌面端和移动端的不错选择 前言 SQLite身影无处不在。 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低&a…...

【Android 内存优化】 native内存泄漏监控方案源码分析

文章目录 前言使用效果使用apiJNI的动态注册native方法动态注册 hook的实现android_dlopen_ext和dl_iterate_phdr naive监控的实现nativeGetLeakAllocs 总结 前言 Android的native泄漏怎么检测?下面通过研究开源项目KOOM来一探究竟。 使用效果 未触发泄漏前的日志…...

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

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

Android 11系统启动流程

在Android 11系统启动流程中,系统启动主要经历了以下几个阶段: 引导加载程序(Bootloader)启动: 当设备加电后,首先运行的是ROM Bootloader,它负责验证操作系统映像的完整性、初始化基本硬件并加…...

python 爬取杭州小区挂牌均价

下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…...

数据可视化-ECharts Html项目实战(3)

在之前的文章中,我们学习了如何创建堆积折线图,饼图以及较难的瀑布图并更改图标标题。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 …...

【理解机器学习算法】之Clustering算法(K-Means)

实现 K-means 聚类从零开始涉及几个关键步骤:初始化质心、将点分配给最近的质心、根据分配更新质心,以及重复这个过程直到收敛。这里是一个基本的 Python 实现: K-means 算法步骤: 初始化质心:从数据点中随机选择 k …...

Transformer的前世今生 day02(神经网络语言模型、词向量)

神经网络语言模型 使用神经网络的方法,去完成语言模型的两个问题,下图为两层感知机的神经网络语言模型: 假设词典V内有五个词:“判断”、“这个”、“词”、“的”、“词性”,且要输出P(w_next | “判断”、“这个”、…...

【Linux】多线程编程基础

💻文章目录 📄前言🌺linux线程基础线程的概念线程的优缺点线程与进程的区别 线程的创建 🌻linux线程冲突概念互斥锁函数介绍加锁的缺点 📓总结 📄前言 无论你是否为程序员,相信多线程这个词汇应…...

【地图】腾讯地图 - InfoWindow 自定义信息窗口内容时,内容 html 嵌套混乱问题

目录 需求描述问题问题代码页面展示 解决原因解决办法解决代码页面展示 代码汇总注 需求描述 腾讯地图上画点位,点击点位展示弹框信息 问题 问题代码 // 打开弹框 openInfoWindow(position, content) {this.infoWindow new TMap.InfoWindow({map: this.map,posit…...

Vue3、element-plus和Vue2、elementUI的一些转换

插槽 Vue3<template #default"scope"></template> <template #footer></template>Vue2<template slot-scope"scope"></template> <template slot"footer"></template>JS定义 Vue3 <script…...

Go语言gin框架中加载html/css/js等静态资源

Gin框架没有内置静态文件服务&#xff0c;但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下&#xff1a; 一、gin 框架加载 Html 模板文件的方法 方式1&#xff1a;加载单个或多个html文件&#xff0c;需要指明具体文件名 r.LoadHTMLFiles("vie…...

#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行

3 月 19 日&#xff0c;#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场&#xff0c;深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》&#xff0c;从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…...

flask 继续学习

group_by group_by是一种在数据库查询或数据处理中常用的操作&#xff0c;它用于将数据按照指定的列进行分组。通过group_by操作&#xff0c;可以将数据集按照某个列的值进行分类&#xff0c;然后对每个分类进行聚合计算或其他操作。 在SQL语言中&#xff0c;group_by通常与聚…...

DockerFile遇到的坑

CMD 命令的坑 dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。 FROM golang WORKDIR / COPY . ./All-in-one CMD ["/bin/sh","-c","touch /kkk.txt && ls -la"] RUN echo alias ll"ls -la" > ~/.bashrc(不…...

并网型风光储微电网日前优化调度(MATLAB实现)

考虑了光伏发电、风力发电、电池储能和负荷需求等因素&#xff0c;与主网相连不考虑向主网售电情况。 % 微电网日前优化调度示例代码% 定义时间步长&#xff08;例如&#xff0c;每小时&#xff09; time_steps 24;% 生成模拟数据&#xff1a;光伏发电量&#xff0c;风力发电…...

Noto字体:全球多语言字体解决方案的全面实战指南

Noto字体&#xff1a;全球多语言字体解决方案的全面实战指南 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 在数字时代&#xff0c;文字显示问题常常困扰着全球用户。当系统无法正确渲染…...

OpenClaw+优云智算Coding Plan:从灵感到成文,再到发布的全流程AI自动化稍

1.安装环境准备 1.1.查看物理内存 [rootaiserver ~]# free -m 1.2.操作系统版本 [rootaiserver ~]# cat /etc/redhat-release 1.3.操作系统内存 [rootaiserver ~]# df -h /dev/shm/ 1.4.磁盘空间 [rootaiserver ~]# df -TH [rootaiserver ~]# df -h /tmp/ [rootaiserver ~]# d…...

Qwen-Image-2512-Pixel-Art-LoRA 构建自动化工作流:与n8n集成实现定时像素画生成

Qwen-Image-2512-Pixel-Art-LoRA 构建自动化工作流&#xff1a;与n8n集成实现定时像素画生成 1. 引言 想象一下&#xff0c;你运营着一个社交媒体账号&#xff0c;每天都需要发布一张风格独特的像素画来吸引粉丝。或者&#xff0c;你的电商店铺每周都有新品上架&#xff0c;需…...

如何在The Algorithms - PHP中贡献代码:完整贡献流程与最佳实践

如何在The Algorithms - PHP中贡献代码&#xff1a;完整贡献流程与最佳实践 【免费下载链接】PHP All Algorithms implemented in PHP 项目地址: https://gitcode.com/gh_mirrors/php1/PHP The Algorithms - PHP是一个致力于用PHP实现各种算法的开源项目&#xff0c;为开…...

避坑指南:CubeMX配置STM32H743定时器PWM中断,HAL库回调函数到底怎么选?

STM32H743定时器PWM中断实战&#xff1a;HAL库回调函数选择与深度解析 在嵌入式开发中&#xff0c;精确控制PWM信号是驱动电机、控制LED亮度等场景的核心需求。STM32H743作为高性能微控制器&#xff0c;其定时器模块提供了丰富的PWM生成和中断功能。然而&#xff0c;HAL库中看似…...

Qt——Qt中的标准对话框

1.消息对话框是应用程序中最常见的界面元素消息对话框主要用于&#xff1a;为用户提示重要信息&#xff0c;强制用户进行操作选择2.文件对话框Open Mode——应用程序中需要用户打开一个外部的文件Save Mode——应用程序中需要将当前内容存储在用户指定的外部文件中Widget.h#ifn…...

告别眼瞎!FullEventLogView实战:高效分析海量Windows安全日志(evtx文件)的保姆级技巧

告别眼瞎&#xff01;FullEventLogView实战&#xff1a;高效分析海量Windows安全日志&#xff08;evtx文件&#xff09;的保姆级技巧 在网络安全事件响应和系统运维中&#xff0c;Windows事件日志&#xff08;evtx文件&#xff09;分析是每个技术人员都绕不开的必修课。但当你面…...

Camera Graph™全域拓扑:普陀海岛场景下人员无感跨镜跟踪,ID永续不跳变

一、前言&#xff1a;海岛跨镜追踪的行业痛点与范式革命 1.1 传统方案的致命缺陷&#xff08;海岛场景失效&#xff09; - ReID/外观匹配&#xff1a;海岛多雾、逆光、遮挡、服饰相似、视角剧变&#xff0c;特征漂移、误关联、ID频繁跳变、断链率&#xff1e;60%&#xff0…...

Ostrakon-VL-8B赋能Web前端:实现图片智能ALT文本自动生成

Ostrakon-VL-8B赋能Web前端&#xff1a;实现图片智能ALT文本自动生成 1. 引言 你有没有想过&#xff0c;网站上的图片对于看不见屏幕的人来说&#xff0c;意味着什么&#xff1f;对于搜索引擎来说&#xff0c;又意味着什么&#xff1f;答案就在那个小小的 alt 属性里。它不仅…...

终极PEFT技术教程:用少量数据高效微调大模型的完整指南

终极PEFT技术教程&#xff1a;用少量数据高效微调大模型的完整指南 【免费下载链接】notebooks Notebooks using the Hugging Face libraries &#x1f917; 项目地址: https://gitcode.com/gh_mirrors/note/notebooks GitHub 加速计划 / note / notebooks项目提供了丰富…...