实体框架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使用场景:
- 从数据库生成
Class类。 - 由实体类生成数据库表结构。
- 通过数据库可视化器设计数据库,同时生成实体类。
二、O/R Mapping是什么
ORM-Object/Relational Mapper,即“对象-关系型数据映射组件”。对于O/R,即 Object(对象)和 Relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。ORM是将数据存储从域对象自动映射到关系数据库的工具。ORM主要包含3个部分:域对象,关系数据库对象、映射关系。ORM使类提供自动化CRUD,使开发人员从数据库API和SQL中解放出来。
采用O/R Mapping带来哪些好处
-
在具体的操作数据库的时候,就不需要再去和复杂的
SQL语句打交道,只要像操作对象一样,O/R Mapping工具会自动地将对象的操作转换为SQL语句操作。 -
提高学习和开发效率,极大的降低开发成本。
-
简化代码,减少BUG数量。
通过建立ORM框架,能够大量减少程序开发代码,开发数据层就比较简单,大大减少了出错机会。
-
简化测试。只需测试业务逻辑的类和行为,避免重复的JDBC测试
-
提高性能 对象级缓存( 缓存对象及其关系 )可以避免不必要的数据库存取,极大的提高数据读写的性能。我们也可以节省用于系统调优的时间和工作量。
-
隔离数据源,可以很方便的转换数据库 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是另外一种类似于 LINQ to Entity 的查询语言。然而,它是一种比 L2E 难得多了并且开发者还要单独学习它
对象服务是一个访问数据库数据并且返回数据的主要入口点。对象服务负责具体化,这是一个将从实体客户端数据提供器(下一层)返回的数据转换成对象结构的一个过程。
这一层的主要职责是把 LINQ-to-Entities 或者 Entity SQL 查询转换成能被底层数据库理解的 SQL 查询。它和 ADO.Net 数据提供器通信,数据提供器依次地发送数据到数据库或者从数据库中检索数据。
这一层使用标准的 ADO.Net 和数据库通信
四、Entity Framework三种开发模式
Entity Framework支持3种开发方式,分别是:Code First、Model First及Database 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框架没有内置静态文件服务,但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下: 一、gin 框架加载 Html 模板文件的方法 方式1:加载单个或多个html文件,需要指明具体文件名 r.LoadHTMLFiles("vie…...
#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
3 月 19 日,#鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行。 现场,深圳市南山区人民政府副区长李志娜发布《2024 年南山区支持鸿蒙原生应用发展首批政策措施清单》,从加强鸿蒙原生应用供给能力、推动鸿蒙原生应用产业集聚、完善鸿蒙原生…...
flask 继续学习
group_by group_by是一种在数据库查询或数据处理中常用的操作,它用于将数据按照指定的列进行分组。通过group_by操作,可以将数据集按照某个列的值进行分类,然后对每个分类进行聚合计算或其他操作。 在SQL语言中,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实现)
考虑了光伏发电、风力发电、电池储能和负荷需求等因素,与主网相连不考虑向主网售电情况。 % 微电网日前优化调度示例代码% 定义时间步长(例如,每小时) time_steps 24;% 生成模拟数据:光伏发电量,风力发电…...
Stable Yogi Leather-Dress-Collection企业案例:ACG品牌联名款服装概念图生成
Stable Yogi Leather-Dress-Collection企业案例:ACG品牌联名款服装概念图生成 想象一下,你是一家ACG(动画、漫画、游戏)潮牌的设计师。下个季度要和一部热门动漫IP联名,主题是“赛博朋克机车风”。老板要求你在三天内…...
nlp_structbert_sentence-similarity_chinese-large实战案例:在线教育题库题目语义查重系统
nlp_structbert_sentence-similarity_chinese-large实战案例:在线教育题库题目语义查重系统 1. 项目背景与需求 在线教育平台每天都会产生大量的题目内容,老师们经常遇到这样的困扰:新出的题目是不是和题库中已有的题目重复了?传…...
企业级LLM内容提取架构:Jina Reader生产环境深度集成实战
企业级LLM内容提取架构:Jina Reader生产环境深度集成实战 【免费下载链接】reader Convert any URL to an LLM-friendly input with a simple prefix https://r.jina.ai/ 项目地址: https://gitcode.com/GitHub_Trending/rea/reader 在当今AI应用开发中&…...
引言:从中心化到去中心化——互联网存储的范式革命
从HTTP到CID:地址的哲学转变 传统互联网用位置寻址:https://company.com/data/file.pdf 这个URL指向的是某个服务器上的某个路径。服务器宕机、域名过期、公司倒闭,内容就没了。而IPFS这类分布式存储用的是内容寻址:QmXoypizjW3Wk…...
AirSim实战指南(3)PythonAPI环境搭建与VehicleClient核心功能解析
1. PythonAPI环境搭建全攻略 第一次接触AirSim的PythonAPI时,我花了整整两天时间才把环境配通。现在回想起来,那些报错信息其实都有明确的解决方案。咱们用Anaconda新建一个Python3.7环境(实测3.6-3.8版本兼容性最好),…...
基于Python的社区团购管理系统毕业设计
博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一套基于Python的社区团购管理系统,以解决当前社区团购业务中存在的效率低下、信息不对称、用户体验不佳等问题。具体研究目的如…...
三步搞定B站视频转文字:从链接到文字稿的智能转换方案
三步搞定B站视频转文字:从链接到文字稿的智能转换方案 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为观看B站视频时无法快速记录重点内容而…...
Mathtype公式处理难题解决:Nanbeige 4.1-3B识别图片公式并转为LaTeX
Mathtype公式处理难题解决:Nanbeige 4.1-3B识别图片公式并转为LaTeX 每次看到论文或者PDF里那些复杂的数学公式,你是不是也头疼过?想把它们弄到自己的文档里,要么得一个字一个字地敲,要么用Mathtype之类的工具慢慢点&…...
Nano-Banana Studio详细步骤:上传图片→选风格→调参→下载高清图
Nano-Banana Studio详细步骤:上传图片→选风格→调参→下载高清图 1. 认识Nano-Banana Studio:你的智能拆解设计助手 Nano-Banana Studio是一款基于先进AI技术的图像生成工具,专门帮助用户将各种物品一键生成专业级的拆解展示图。无论是服装…...
【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---GUI-MCP 整体架构挚
前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...
