Entity Framework学习笔记——EF简介(一篇文章告诉你什么是EF)

简介: Entity Framework是以ADO.NET为基础,面向数据的“实体框架”。以下简称EF。 它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。

       Entity Framework是以ADO.NET为基础,面向数据的“实体框架”。以下简称EF。


       它利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。


      个人认为百科上对EF一句比较经典的解释为:让上层的应用程序码可以如面向对象的方式般访问数据。    


      过去我们对数据库都是直接读取,业务数据中都是使用DataSet、DataTable等来传值,造成代码丑陋,严重脱离了OO的思想。


 


      举个例子,当向数据库中存储时,实体框架主要是用来帮助我们把一个个对象存储到数据库中去(即通过对象与数据库“打交道”),只要把对象交给实体框架,不用自己写SQL语句,它会帮助我们自动生成SQL语句,这里生成的SQL语句通过ADO.NET发送到数据库中去,即操作数据库还是通过ADO.NET,所以本文首句说到了“EF是以ADO.NET为基础,面向数据的‘实体框架’ ”。


       具体过程可以用下图表示:


41.png


       如上图,假如要把内存中的两个实体Student和Teacher存储到数据库中,EF会自动将实体通过EDM的映射,将一个实体作为一条记录存入到数据库中去,那EF是如何判断哪个实体应该存到哪张表里,哪个属性应该存到哪个字段里呢?这就是映射的强大所在:


       在VisualStudio中,映射通过  .edmx 文件来体现,.edmx文件的本质是一个 XML 文件,它用于定义概念模型、存储模型和这些模型之间的映射。


       比如在上例的映射中,可以通过类似于如下形式来体现:


<!-- CSDL 此处表示实体 -->
<Entity Name="Student">
    <Pro Name="StuName">
    <Pro Name="StuSex">
    <Pro Name="StuAge">
</Entity>
<!-- SSDL 此处表示数据库表 -->
<Table Name="Student">
    <Col Name="StuName">
    <Col Name="StuSex">
    <Col Name="StuAge">
</Table>
<!-- C-S 此处表示实体与数据库表的映射关系 -->
<Relation Entity="Student" Table="Student">
    <Rel ProName="StuName" ColName="StuName">  <!--实体中StuName属性对应表中StuName字段-->
    <Col ProName="StuSex" ColName="StuSex">    
    <Col ProName="StuAge" ColName="StuAge">
</Relation>


          上述代码并不是 .edmx文件中的确切格式,此处为了简单说明,读者可以看做是“伪代码”,后面将会简单介绍 .edmx 文件创建和基本格式。


       通过上面可以了解到,从读代码的角度来说,EF可以使我们在不需要了解数据结构的情况下就可以很好地理解;从实现的角度来说,EF可以使存储“模型化”,就如同将很多个对象存储在一个List中似的,向数据库表里存储的都是一个个实例,从数据库中取到的也都是一个个实例。程序如此跟数据库的交互,和OO化的代码相互对应,容易“对接”。


相关文章
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
216466 68
|
1月前
|
Ubuntu Linux 图形学
Ubuntu 25.04:全新升级与未来展望
此外,Ubuntu 25.04还同步发布了众多官方衍生版本和支持周期,如Kubuntu、Xubuntu、Ubuntu MATE、Budgie、Unity、Studio、Cinnamon和Kylin等。用户可以从Ubuntu官网轻松下载这些版本。值得注意的是,作为一个非LTS版本,支持周期为9个月,预计将于2026年1月结束。因此,对于那些需要稳定性和长期支持的用户来说,Ubuntu 24.04 LTS仍然是一个推荐的选择。
|
关系型数据库 MySQL 网络安全
MySQL主从复制之多主多从部署流程—2023.04
MySQL主从复制之多主多从部署流程—2023.04
919 0
|
NoSQL MongoDB 关系型数据库
13个Mongodb GUI可视化管理工具,总有一款适合你
本文介绍了13个好用的MongoDB可视化工具。Robomongo,MongoDB Compass,phpMoAdmin等
111557 0
13个Mongodb GUI可视化管理工具,总有一款适合你
|
10月前
|
监控 测试技术 持续交付
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
239 0
|
缓存 运维 NoSQL
面试分享:Redis在大数据环境下的缓存策略与实践
【4月更文挑战第10天】探索Redis在大数据缓存的关键作用,本文分享面试经验及必备知识点。聚焦Redis数据结构(String、List、Set、Hash、Sorted Set)及其适用场景,缓存策略(LRU、LFU、TTL)与过期机制,集群和数据分片,以及性能优化和运维技巧。通过代码示例深入理解,助你面试成功,构建高效缓存服务。
341 4
|
监控 搜索推荐 物联网
不容错过!盘点4款实用的固定资产管理系统!
现如今,市面上的固定资产管理软件层出不穷。本文为大家整理了市面上比较优秀的几款软件,包括草料二维码、金蝶等等。
|
人机交互 领域建模 数据库
DDD中领域故事的作用
【8月更文挑战第14天】
194 0
|
SQL 微服务
成功解决 :status 500 reading CouponFeignService#saveSpuBounds(SpuBoundTo)
这篇文章讲述了作者在微服务项目开发中遇到的一个具体问题:使用Feign进行远程服务调用时出现了`status 500`错误。文章详细描述了排查过程,包括检查Feign配置和被调用服务的日志信息,最终确定问题是由于Lombok插件的`@Data`注解导致。作者通过将`@Data`注解注释掉并手动生成get、set方法解决了问题,并提供了成功调用远程服务后的截图。
成功解决 :status 500 reading CouponFeignService#saveSpuBounds(SpuBoundTo)
|
开发框架 前端开发 JavaScript
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果
在WPF应用中实现DataGrid的分组显示,以及嵌套明细展示效果