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的三层

转载于:https://www.cnblogs.com/CSharpLover/p/6115713.html

Entity Framework part2相关推荐

  1. EF-Entity Framework 相关技术点收集贴

    不定期.偶尔.添加更新 在网络上看到或者自己开发过程中碰到的EF-Entity Framework相关技术点 本文地址:http://www.cnblogs.com/vnii/archive/2012 ...

  2. C#综合揭秘——Entity Framework 并发处理详解

    引言 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework,.NET 都 ...

  3. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想

    前言 借书正式出版之际,完整回顾下从写博客到写书整个历程,也算是对自己近三年在技术上的一个总结,整个历程可通过三个万万没想到来概括,请耐心阅读. 写博.写书完整历程回顾 从2013年12月注册博客园账 ...

  4. Entity Framework Code First在Oracle下的伪实现

    为什么要说是伪实现,因为还做不到类似MsSql中那样完全的功能.Oralce中的数据库还是要我们自己手动去创建的.这里,我们舍掉了Model First中的EDMX文件,自己在代码里面写模型与映射关系 ...

  5. Entity Framework:Code-First Tutorial开篇

    这个系列文章是关于Entity Framework Code-First的英文系列文章,内容不错,每篇一个主题知识点介绍,特转载过来 原文地址:http://www.entityframeworktu ...

  6. entity framework 使用Mysql配置文件

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="utf-8"?> ...

  7. Entity Framework CodeFirst数据迁移

    原文:Entity Framework CodeFirst数据迁移 前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是"Database Fi ...

  8. 看看Entity Framework 4生成的复杂的分页SQL语句

    之前发现Entity Framework 4生成的COUNT查询语句问题,今天又发现它生成的分页SQL语句问题,而LINQ to SQL却不存在这个问题. >>> 来看一看,瞧一瞧! ...

  9. Entity Framework的启动速度优化

    最近开发的服务放到IIS上寄宿之后,遇到一些现象,比如刚部署之后,第一次启动很慢:程序放置一会儿,再次请求也会比较慢.比如第一个问题,可以解释为初次请求某一个服务的时候,需要把程序集加载到内存中可能比 ...

最新文章

  1. php+mysql显示乱码的个人总结
  2. “中文四六级”考试来了!《国际中文教育中文水平等级标准》发布
  3. linux 秒数转时间格式,通过delphi将秒数转换成日期格式
  4. Android艺术探索笔记 - 创建AIDL文件后自动生成的文件分析
  5. 关于Chrome内核88版本无法正常使用Adobe Flash Player公告
  6. NHibernate 的 ID 标识选择器
  7. 中国石油大学《机械基础(设计与制造)》第二阶段在线作业
  8. IPv6/IPv4 + aliddns 实现黑群晖外网控制和访问
  9. 网络嗅探器(影音神探) v4.63 绿色正式版
  10. Katalon Studio:一款静候你使用的免费自动化测试工具
  11. HowTo——cotex-m3处理器HardFault事后分析方法
  12. 借助方便的工具平台,让App制作变简单
  13. M - Help Hanzo
  14. 教你解决路由黑洞5招
  15. mysql源码安装详解
  16. 基于pgpool-II读写分离+postgresql10主从从流复制高可用部署方案
  17. JS算法-整数转罗马数字
  18. 数据库设计之网上书店系统
  19. html鉴赏古诗词代码,教你如何鉴赏古诗词
  20. 电子计算机常用面试题,计算机常用面试题文档.doc

热门文章

  1. 解决VS2017运行时控制台一闪即逝问题的方法
  2. 【ARM】Tiny4412裸板编程之MMU(段 16M)
  3. 【Linux】一步一步学Linux——logname命令(109)
  4. 【Linux网络编程】原始套接字编程
  5. python基础list_Python基础4(list:列表)
  6. jira使用教程pdf_需要申请项目?需要开通权限?需要创建流程?刚需教程安排上了!...
  7. C语言DCI(OCI)方式连接DM数据库
  8. WriteFile写UNICODE字符串 TxT显示乱码
  9. CIPAddressCtrl类的使用(IP地址与CString的互相转化)
  10. 成功的前提,35岁前必须做好的十件事