【EF 4】ORM框架及其流行产品之一EF介绍

2024-08-25 22:08
文章标签 介绍 框架 产品 orm ef 流行

本文主要是介绍【EF 4】ORM框架及其流行产品之一EF介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导读:跳进了多租户切换数据库的坑,那么就继续走下去吧。在我们的项目中,是运用EF实现对数据库的操作,那么EF其实是.NET系统中,基于ORM框架的一个产品实现。在java那边,则有Hibernate和ibatis等具体实现。既然研究的是ORM的具体实现,那么还是很有必要介绍一下ORM的原理的。因为本人主要是基于EF研究,所以在描述过程中,均已EF开发作为实例。

 

一、ORM

1.1,概念

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

1.2,概念理解

O(Object)

它是程序设计中的对象,具体说来,也就是在开发过程中,所建立的Model层,在Model层中,每一个类都描述了一个对象,比如说:

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">using System;
using System.Collections.Generic;namespace MyModel.Models
{public partial class TestTableone{public string Id { get; set; }public string name { get; set; }public string sex { get; set; }public string testcolumn { get; set; }}
}
</span>


上面的这个类,其实是描述了一个对象:TestTableone

 

 

R(Relational )

它是程序设计中的关系数据库(ORM框架,一般来说对应的是关系型数据库),具体说来,它其实是描述作为咱们数据持久层里面的表单。也就是说,它实际上是指咱们设计好的数据库对象,每张表单的字段、主外键、索引等。

 

M(Mapping)

比起映射,或者说直接理解为地图,更能让我们接受。想象地图在我们生活中是用来干嘛的?它能帮助我们找到目的地。那么,在程序中,mapping文件是用来干嘛的呢?这就涉及到ORM框架的工作原理,我们将在第二部分进行介绍。

图像理解:

 

二、EF工作原理

ORM框架最基本的工作原理,其实就是通过操作O(对象)去实现操作R(表单),而他们之间的连接或者说桥梁,就是Mapping(映射)。

下面,主要介绍一下产品EF的工作原理:

2.1,EF框架示意图

 

2.2,原理分析

首先,基于最底层的是SSDL,与之对应的是ADO.net的存储模型(数据库服务器)驱动。这里进行了数据库服务驱动,以及数据库的描述。

然后,基于中间层的是CSDL,与之对应的是EntityClient的实体数据驱动,在这里确定了ORM框架中的驱动形式,EF中使用EF驱动,ORM其他产品,都有自己对应的驱动。在这里面,是对于EF中的实体对象进行了描述。

最后,基于最上层的是对象元数据和对象服务,包含了对于对象的一系列操作。

那么,EF工作的时候,它通过最上层的对象服务,去操作对象元数据,而后过渡到EF的数据驱动,将最上层的操作,通过CSDL规则文件进行描述。然后紧接着,借助MSL映射规范,将CSDL描述的的内容,对应到SSDL(数据库表单),最后通过ADO.net的数据驱动,将SSDL描述的内容读写到具体的数据库。到最后进行读写操作的,一定会是数据库服务驱动所要求的语言,这一个过程,也是使用linq toSQL的一个具体流程。

 

三、EF的优缺点

3.1,优点

隐藏了数据访问细节,“封闭”的通用数据库交互,这是ORM的核心。它使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。

ORM使我们构造固化数据结构变得简单易行,不用将模型操作转化为一条一条的SQL语句。

3.2,缺点

EF牺牲了性能,虽然在于SQL语句转化的时候,耗费的时间非常小,但是它仍然远远没有直接执行SQL语句速度快。

对于一种复杂的查询,EF显得力不从心。最为显著的一个就是,多表联合查询。

 

四、总结

先来看下面一段话:

As good object-oriented developers got tired of this repetitive work, their typical tendency towards enlightened laziness started to manifest itself in the creation of tools to help automate the process. When working with relational databases, the culmination of such efforts were object/relational mapping tools.

作为一个优秀的开发人员,已经厌倦了这种重复的工具(重复的编写SQL语句),他们有一种典型的倾向,一种高效的懒惰开始显示出来:去创造一种工具,帮助实现自动化过程。当和关系型数据库打交道时,这种高明懒惰的努力成果是:ORM框架。

ORM框架到底是一种Helper,帮助我们实现了操作数据库语句的封装,它在本质上就等同于我们之前所写过的SQLHelper,当它的封装,满足不了自己的开发时,我们就开始抱怨。当它的封装可以满足时,我们就开始窃喜。可是,ORM对于自己的定位,从来都不是一种全能全效的产品,它只是一种工具。结合到目前的项目来看,我们想要依靠EF去实现多租户的数据库切换,我们在抱怨它能实现的模式,有弊端。没弊端的模式,实现不了,或者是困难重重。但是,这都是我们自己的要求太高了,框架本身就是一种平衡。有所舍弃,才有所获得。又想好又想巧,买个老驴不吃草,这都是不现实的。

 

下面会陆续总结在项目中所遇到的困难和分析,目前我们的实现有很多的问题,如有高人到此,请不吝赐教。

 

这篇关于【EF 4】ORM框架及其流行产品之一EF介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以