EF基础知识小记一

1、EF等ORM解决方案出现的原因

因为软件开发中分析和解决问题的方法已经接近成熟,然后关系型数据库却没有,很多年来,数据依然是保存在表行列这样的模式里,所以,在面相对象和高度标准化的数据库中产生了一个失配(不匹配、阻抗失配,微软的安德斯.海尔斯伯格<C#之父>可能会这样叫它),为了解决这个失配,大多数项目中都会引入"数据处理层"来转换应用程序实体层的数据到数据库的行和列中,随着"数据处理层"的不断进化,最后ORM就诞生了。

2、集成查询语言LINQ

LINQ和EF都出自于微软,都能帮助我们解决失配的问题.使用EF等实体框架,我们能在设计器中(Model First)或者代码(Code First)对领域实体进行建模.还能建立实体类之间的关系。面对这些实体类以及他们之间的关系,我们通过构建LINQ查询来应对,LINQ允许我们在代码中使用实体类以及他们之间的关系来表达关系数据库中的概念。EF+LINQ的开发方式能帮助我们极大的减少工作量.相对于大量的、高度冗余的Ado.Net数据访问方式,使用LINQ查询来表达我们对数据需求更加的合适,EF等实体框架会帮你们实现实体类到底层数据库的映射。

3、实体框架的历史

版本1.0:它只提供了ORM最基本的特性,只实现了"数据库优先"的方案(DataBase First)

版本4.0:版本4.0实现了"模型优先"的方案,提供了对简单的公共语言运行时对象完整的支持,以及数据的延迟加载行为.(Model First)

版本4.1~4.3:实现了"代码优先"的方案.(Code First)

之后的版本:提供了重大的性能改进,并支持了枚举类型,表值函数,空间数据类型,存储过程的一系列改进,以及对asp.net MVC框架的深度支持

版本6.0:提供了查询和更新的异步支持,在代码优先(Code First)中,存储过程支持更新,性能改进,以及一系列的新特性,本书将聚焦这些新特性

4、模型

实体框架是一个强烈关注建模的技术,实体框架创建的是实体数据模型(EDM)的模型,它允许你在编码时使用强类型的实体类,不是关系型数据库中的结构和对象.实体数据模型允许你自定义实体类和关系型数据库表之间的映射.不仅仅是一对一或者类到表的映射.

 在图1-2中,展示了左边的数据库表不直接映射到右边的实体类型(代码中使用)的。实体数据模型中的映射能力使开发者可以使用与问题域(problem domain)高度一至的实体类型集,替代高度结构化的数据库。以设计出高性能、可伸缩、可维护的代码。

  例如,上面图中标注的,Employees,Devices,以及Phone Numbers 在物理存储中是使用的三张不同的表。从DBA(数据库管理员)的观点来看,这是一个完美的场景。但是,从开发人员,或项目相关相关人员的角度来看,employee是一个单一的包含Devices和phone numbers的对象,开发人员编码时使用一个单一的Employee实体类,它包含Devices和Phone Numbers的集合。开发人员不知道也不关心数据库管理员是如何把这个对象分别存储在三张不同的数据库表中的。一旦配置,单一对象和三张数据库之间的映射将被实体框架处理。

  一个相反的情形是,上图中的单表Department被映射成三个代表特定的departments。同样的,开发人员和项目相关人员用一个单独的对象来表示每一个部门(Accounting,Marketing,Finance,等等),但DBA出于对数据在存储的优化,将这三个对象整合到一个单一的数据库表中。

  当然,你能看到上图中的Location表,你能很容易的将它映射到单一的实体类,也这是实体框架的默认行为。

  这里的关键点在,开发人员和项目相关人员使用表示应用程序上下文中的领域实体类,而DBA构建底层的数据库表以求创建高效和数据库。实体框架能很容易地架起两者单的桥梁。

5、分层

实体数据模型包含三层:概念层、存储层、映射层,每个层互不耦合

概念层:实体类包含在数据模型的概念层中,这一层为开发人员和项目相关人员所使用,概念层能通过设计器(Model First)和代码建模(Code First).概念层的语法是通过概念架构定义语言(CSDL)来定义的

映射层:映射层定义概念层和存储层之间的映射,该层定义类的属性如何映射到数据表中的列.映射规格语言(MSL)来定义

存储层:将应用程序中的对象映射到某一存储系统中,实体框架中的数据模型定义表、列,关系以及映射到底层数据库中的数据类型.存储架构定义语言(SSDL)定义了存储模型的语法。

6、实体属性

一个实体类型拥有一个或者多个属性,像一个类,属性分为标量属性、导航属性

标量属性:像integer,string等简单类型就是标量属性,也可以是复杂类型

导航属性:是指跟其它实体有关联的属性(数据库中的外键关系)

7、上下文对象

下文对象为ObjectContext对象,现在,实体框架支持另一个最新的名为DbContext的上下文对象。DbContext大大简单化了使用实体框架的体验。有趣的是,DbContext是ObjectContext的一个包装器或者外观实现者。以一种直观的、友好的、有效的方式暴露底层ObjectContext的功能。

时间: 2024-11-05 13:40:05

EF基础知识小记一的相关文章

web基础知识小记

<!doctype html><html lang="en"> <head>  <meta charset="UTF-8">  <meta name="Generator" content="EditPlus®">  <meta name="Author" content="">  <meta name=&qu

Linq基础知识小记三

1.子查询 Linq中的子查询思想和Sql中的子查询其实差不多, 对于方法语法,一个子查询包含在另一个子查询的Lambda表达式中,代码如下: string[] names = { "James", "Kobe", "Curry", "Durrent" }; IEnumerable<string> result = names.OrderBy(n => n.Split().Last()); n.Split()

Linq基础知识小记

1.LINQ(语言级集成查询)的作用就是提供一种统一且对称的方式,让程序员在广义的数据上获取和操作数据.广义的数据包括XML文档数据.元数据.System.Data.dll和System.Data.SqlClient.dll提供的DataSet和DataTable等数据.内存数据(Array.Collection)等. 2.Linq To Object是针对实现了IEnumerable<T>的对象操作或获取数据的功能,代码如下: (1).通过Enumerable的实例方法实现查询 string

ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF)

原文:ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF) 先上一段代码,了解一下 .NET Core 配置数据的结构. 新建一个 控制台项目,添加一个文件 json.json ,文件内容如下: { "country": "cn", "person": { "id": 1, "address": { "addName": "chengdu"

php基础知识总结(3)字符串函数string

一.大小写转换 1.strtolower()--转换为小写. echo strtolower("Hello WORLD!"); //hello world! 2.strtoupper()--转换为大写. echo strtoupper("Hello WORLD!"); //HELLO WORLD! 3.ucfirst()--把首字母转换为大写. echo ucfirst("hello world");     //Hello world 4.uc

C#基础知识回顾整理

20150907~20150928所学基础知识整理,后续完善补充 数据类型 变量 运算符 语句:条件语句.循环语句.跳转语句.异常语句 时间 类.类型 数组.冒泡排序 数组.迷宫操作 集合 结构体 枚举.函数 递归 数据类型: 变量:用于临时存储数据的 变量的定义: 数据类型 变量名: 数据类型  变量名=赋值: 数据类型  变量名1,变量名2,变量名3...: //生成随机数的类 Random r = new Random(); int shu = r.Next(100); Console.W

Bash基础知识

在网上找了一些Shell/bash基础知识. // Study_shell.txt // 2016.1.1 by Huangtao 1. 定义变量时,变量名不加美元符号,变量名和等号之间不能有空格. 使用一个定义过的变量,只要在变量名前面加美元符号即可. 推荐给所有变量加上花括号,帮助解释器识别变量的边界. 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变. readonly a 使用 unset 命令可以删除变量,不能删除只读变量. 2. Shell字符串可以用单引

趁一切还来得及【一】数据库MySQL基础知识及编译安装

此情更待成追忆,只是当时已惘然.                                        --[唐]李商隐 第一章 数据库概述及分类特点应用 1.1 数据库种类.语言处理.典型产品 ①数据库的理解:就是一个存放数据的仓库,这个仓库是按照一定的数据结构,来组织和存储的.可以通过数据库提供的多种方法来管理数据库. ②数据库的种类:按照早期的数据库理论分为层次数据库.网络式数据库.和关系型数据库.当今互联网最常用的就是关系型数据库和非关系型数据库(NOSQL). ③关系型数据库:

转:正则表达式基础知识

一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配.如: JScript VBScript 匹配 /^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行. /\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成. /<(.*)&