Entity Framework part2

EF原理
以XML方式打开edmx文件,这个XML的文件主要包含两大部分:Runtime是类模型部分,Designer是VS中的图形界面
重点讨论的是Runtime部分,又分为三大部分:
SSDL数据模型部分
CSDL概念模型部分
C-S Mapping映射规则部分
画图演示ORM与edmx中的对应关系
根据映射关系和实体状态完成sql的生成

Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。

概念层E:负责向上的对象与属性显露与访问
对应层M:将上方的概念层和底下的储存层的数据结构对应在一起。
储存层D:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生

EF中操作数据库的网关:上下文
ObjectContext封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。
ObjectContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互。
ObjectContext 类的实例封装以下内容:
到数据库的连接,以 EntityConnection 对象的形式封装。
描述该模型的元数据,以 MetadataWorkspace 对象的形式封装
用于管理缓存中持久保存的对象的 ObjectStateManager 对象
注意:在EF4.0之前的版本中都是EF访问数据库的入口是ObjectContext。而在EF4.1之后的版本中最新的数据库访问上下文的入口改成了DbContext。本质上来说:DbContext继承了ObjectContext类,所以新版本中不能直接使用ObjectContext里面的方法和属性等,但基本底层的东西还是一致的。

EF相比Ado.Net的优点
极大的提高开发效率,EF是微软自己的产品,跟VS开发工具集成度比较好,开发中代码都是强类型的,写代码效率非常高,自动化程序非常高,命令式的编程
EF提供的模型设计器非常强大,不仅仅带来了设计数据库的革命,也附带来的自动化生成模型代码的功能也极大的提高开发和架构设计的效率
EF跨数据库支持是ORM框架主要功能点之一,带来的可以是通过仅仅改变配置就可以做到跨数据库的能力
缺陷:性能差(生成sql脚本阶段),在复杂查询的时候生成的sql脚本效率不是很高

EF相对Ado.Net的缺点
问1:EF性能好不好呢?
答1:不好,性能有损耗
问2:损耗在哪里呢?
答3:数据库端性能损耗是一样的;损消耗在将对象状态转换为SQL语句时损失性能,但是更换数据库是非常方便的

Model First
在项目一开始,没有数据库时,可以借助EF设计模型,然后根据模型同步,完成数据库中表的创建,这就是ModelFirst开发方式
示例:创建模型BookInfo、BookType

属性的类型:
这里的类型都是CTS中的类型,即IL中使用的类型
Int32
String,可以选择是否采用Unicode编码,如果采用则对应着sql server中的nvarchar类型
Decimal,表示指定小数位数及数据精度的类型,范围表示小数个数,精度显示总的数据位数
属性“可以为Null”
属性“实体键”:表示设置主键

关联:
1:1性能低(不会延迟加载,添加时必须同时创建两个对象),不要使用,可以自己实现逻辑代码完成这种操作,可以查看一下表结构,本质还是1:m的结构
1:m
m:n:可以手动创建中间表采用1:m关系,也可以直接使用此种关系,EF会自动创建中间表
在创建关联时,可以选择是否要创建导航属性、外键
导航属性
根据关系的不同,查看生成的导航属性的类型
示例:1对多关系中,对于多端表数据的插入

方法SaveChange():执行所有的命令树,会采用事物机制执行
同步
从数据库更新模型
根据模型生成数据库:删除表后再创建表,会导致表中原有数据丢失;建议手动修改表结构

CodeFirst
对于已经存在了模型类型的项目,怎么使用EF呢?Code first,也叫POCO+Code Only
code only,顾名思义,只需要代码不需要Edmx模型,EF提供了通过类型的结构推断生成Sql并创建数据库中的表,而且能够通过类型的成员推断出实体间的关系的功能,开发人员只需要编写实体类就可以进行EF对数据库的开发
优势:开发更进一步简洁化。开发效率又一次提高。自动化程度进一步提高。可以适用于原有的老项目
劣势:性能不怎么好。了解的人比较少

引入程序集EntityFramework,System.Data.Entity
在配置文件中写连接字符串
创建模型类(如果项目中已经有模型类,则只需要维护关系)
通过导航属性来表示类的关系,注意:导航属性设置成virtual,可以实现延迟加载
特性维护:Table,Key,ForeignKey
创建上下文类,继承自DbContext
调用父类构造方法,传递连接字符串"name=***"
根据类型创建数据库表
使用context.Database.CreateIfNotExists()完成数据库中表的创建
调用context.SaveChanges()方法完成保存
关键:上下文,实体类的约束及关系

使用EF与MVC的三层

时间: 2024-10-12 13:03:52

Entity Framework part2的相关文章

Entity Framework的查询

Entity Framework是个好东西,虽然没有Hibernate功能强大,但使用更简便.今天整理一下常见SQL如何用EF来表达,Func形式和Linq形式都会列出来(本人更喜欢Func形式). 1.简单查询: SQL: SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID EF: //Func形式 var clients = ctx.Clients.Where(c => c.Type == 1 && c.D

Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化

9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Frist实现数据访问管理. 本例,我们模拟一个N层场景,用单独的客户端(控制台应用)来调用单独的基于REST服务的Web网站(WEB API应用) . 注意:每层使用单独的Visual Studio 解决方案, 这样更方便配置.调试和模拟一个N层应用. 假设有一个如Figure 9-3所示的旅行社和预订

Entity Framework 学习

Entity Framework 学习初级篇1--EF基本概况... 2 Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍... 7 Entity Framework 学习初级篇3-- LINQ TOEntities. 10 Entity Framework 学习初级篇4--EntitySQL. 17 Entity Framework 学习初级篇5--ObjectQ

异常:error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'

error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient' error 0152: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'. Make sure the pro

初次开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、目前性能还不够好

继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-host测试,但是官方说运行环境的MONO版本至少需要3.4.1,我去年买了个表,至本文发布为止,你让我下地狱去找3.4.1吗,硬着头皮用3.4.0搞了一晚上,MAC一直停留在 httpapi.dll出错,Ubuntu Server 12.0.4 是不认其中的几个DLL包,具体哪几个也忘了,过段时间有了稳定版本再

Entity Framework Code First for SQL Compact

这篇博客将介绍EF Code First中如何使用SQL Compact.SQL Compact是微软推出的免费的关系型数据库,目前最新版本是SQL Compact 4.0.微软的开发工具VS 2010/SQL Server 2008及后续版本中均不带有SQL Compac 3.5/4.0t数据库查看工具.不过CodePlex上有一个SqlCeToolbox的工具非常不错.有点儿像精简版的SQL Server Management Studio. SQL Compact可以用于以下的一些场景,例

Linux + Mono 目前已经支持Entity Framework 6.1

在上个随笔 CentOS上 Mono3.2.8运行ASP.NET MVC4经验中,步骤2中要求卸载EF 5.0,这样才能在Linux + Mono的环境中运行ASP.NET MVC4的Web应用.今天,没有卸载EF 5.0的情况下,使用NuGet新安装了EF 6.1.0,如下图(使用VS012英文版), 图1: 新安装了Entity Framework 6.1.0,同时EF5.0没有卸载,可在图片中看到两个EF共存 图1中的这个网站是一个接近完成的完整网站,在其它各项配置都与 CentOS上 M

Entity Framework工具POCO Code First Generator的使用

在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一款不错的工具 在Visual Studio中,通过"工具"→"扩展和更新..."来安装Entity Framework Reverse POCO Code First Generator 这里添加一个控制台项目,并在项目中添加POCO Code First Genera

Entity Framework 6 和 MVC5

网站地址: Entity  Framework 6   http://msdn.microsoft.com/en-us/data/ef.aspx MVC5     http://www.asp.net/mvc