【EF 1】EF实体框架 原理+实例

2024-08-25 22:18
文章标签 原理 实例 框架 实体 ef

本文主要是介绍【EF 1】EF实体框架 原理+实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、知识回顾

到目前为止,自己学到的链接数据库操作已经经历了几个阶段,分别是:学生信息管理和(第一次)机房收费时的直接连接数据库操作表格,然后是机房个人重构中应用的操作实体,在其中还利用了一个很重要的帮助类:SQLHelper。

 

 

在这个转变中,已经逐步由面向过程转向面向对象,但在分层操作实体的过程中,由于数据库的设计不很完美,有时候需要修改数据库设计,或者需要更改实体。每次遇到这样的事儿,就脑袋疼,因为数据库和实体必须要对应起来,不然问题就越改越大了。
那么怎样解决这一问题呢?最近学习了一个EF实体框架知识,解决了这一问题。

 

 

首先,回顾一下这之前的数据库链接操作。也就是运用ADO.NET进行操作,主要经历5个步骤:建立连接—打开—创建命令—执行—关闭。如:

 

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;"> private void button1_Click(object sender, EventArgs e){string conStr = @"server=.;uid=sa;pwd=123456;database=shoppingBus";//连接字符串SqlConnection sqlconnection = new SqlConnection(conStr);//建立连接sqlconnection.Open();//打开链接string str = "select * from petType";DataTable dt = new DataTable();SqlDataAdapter sqldataadapter = new SqlDataAdapter(str,sqlconnection);//执行命令,读取数据sqldataadapter.Fill(dt);//填充表格this.dataGridView1.DataSource = dt;sqlconnection.Close();//关闭链接}</span></span>


 

 

 

 

二、EF实体框架

2.1,什么是?

实体框架(Entity Framework)是微软以ADO.Net为基础开发出来的对象关系映射(ORM)解决方案,它解决了对象持久化问题,将程序员从编写麻烦的SQL语句当中解放出来。 相对于传统的ADO等各种数据库操纵技术来说,微软的ADO.Net更为先进,它封装了很多底层操作,抽象了接口,针对接口编程,将调用统一化。

2.2,好处(个人理解)

我认为实体框架的好处是,当我们需要修改数据库或者实体时,能够通过实体模型的及时更新解决实体对应映射问题,而不用像之前一样一个一个的对照着修改。而且,它的跨数据库应用实践更为方便,只需要更改配置文件中的数据即可,可以直接将模型生成应用程序数据库到对应数据库服务中。

2.3,应用

2.3.1,准备工作

首先,实在VS中建立新项,添加新建项—数据—ADO.NET实体数据模型,然后设置其自己想要的映射的数据集,设置成功后,会生成一些列文件:

如上图所示,这就是我测试用的shoppingBus数据库生成的实体映射。其中有3个重要的类,分别是:

dataModel.Context.tt下的dataModel.Context.cs类,这个类是包含的数据库的上下文关系,我当时在看的时候就想到了设计模式策略模式中的context类,我认为它们有着共同之处,都是负责数据间的交互和实现。

DataModel.tt下的数据表类,比如这里的就是pet.cs类和petType.cs类。这里就是相当于具体的实体类,值得特别说明的是,EF生成的实体映射同时包括表关系,主外键的关系等。

2.3.2,实践

 

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">  static void Main(string[] args){//第一步:创建EF访问数据库的统一入门,上下文:DbContextshoppingBusEntities1 dbcontext = new shoppingBusEntities1();#region 增、删、改//第二步:插入一条数据,添加一个宠物类型pet pet = new pet();pet.petID = "003";pet.petName = "人";pet.petPrice = 19;//第三步:修改数据,设置状态dbcontext.Entry<pet>(pet).State = EntityState.Modified;//增、删、改,直接修改实体的状态即可#endregion#region 查询var temps = from p in dbcontext.petwhere p.petID == "001"select p;//查询全部列//select p.petName;//查询部分列 foreach (var myPet in temps){Console.WriteLine(myPet.petID + "  " + myPet.petName +" "+myPet.petPrice);}#endregion//第四步:命令把所有的变化都更新到数据库里面去dbcontext.SaveChanges();}</span></span>

 

 

说明:向原来用的SQL链接数据库操作数据一样,EF实体也有自己的逻辑步骤,则是:建立访问入口(上下文)—整理自己的数据—告诉上下文需要执行的操作—保存自己的操作。可以看到,尤其是在增、删、改的过程中,没有看见任何的SQL语句,但其实是由编译器先帮我们翻译成了SQL的脚本。所以,使用EF操作数据库和使用之前的方法操作数据库,主要的区别则是在转换脚本这一过程中的不同,EF需要转换,而之前的方法不需要。

 

三、总结

根据自己目前的理解,我觉得EF实体映射其实已经脱离了对数据库的一个操作。我们操作的应该是实体,然后通过实体映射给数据库。所以是进一步和数据库解耦和了,达到了一个真正的面向对象。

而使用EF实体还有好处就是,可以动态的更新实体和数据库的映射关系,从而就不用向原来一样费神费力的去两边对照修改。可以由数据库端更新,然后直接更新实体映射,也可以是更改实体映射,然后更新数据库。由于EF实体操作并不直接操作数据库,所以它在跨数据库操作方面(更改配置文件中的provider的提供方式),也有着自己的优势。

这篇关于【EF 1】EF实体框架 原理+实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106803

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维