序言<EntityFramework6.0>
Entity Framework是微软战略性的数据访问技术,不同与早期访问技术,Entity Framework并不耦合在Visual Studio中,它提供了一个全面的, 基于模型的生态系统,使您能够开发包括桌面、互联网、云计算和基于服务的应用程序等
历史

EFVersion1 支持Database Frist
EFVersion4 支持Database Frist+Model First【along with full Plain Old CLR Object (POCO) support and
default lazy loading behavior】
EFVersion4.1一EFVersion4.3 支持Database Frist+Model First+Code Frist
EFVersion5 改进性能,支持枚举,表值函数、空间类型, 存储过程【此时只限于Database Frist】,与MVC框架的进一步结合。
EFVersion6 提供了异步的查询和更新,在CodeFrist中开始支持存储过程,提升性能以及引入一些新特性。
模型

使用EntityFramework创建一个模型,最显著的特点就是创建一个实体数据模型(Entity Data Model【EDM】),使用EDM可以自定义实体类和数据表之间的映射关系
Developer:只需要着眼于领域对象模型的开发【即可以直观描述具体问题信息的类】
DBA:更多的从性能,扩展性,易维护性和高度规范性去设计数据库。
例如:上图中的Employees, Devices, Phone信息存在三个不同的物理数据表中,这是从DBA的角度考虑的,但是存developer角度设计的时候,他会在Employee类中包含Devices, Phone的集合信息,同样的,DBA将与部门相关的所有信息全部放在一张Depeartment表中,而developer根据开发的关注的问题需求,将其细分为(会计,市场营销,金融等具体实体对象)。也就是说从不同的角度看问题,developer不会去关心DBA怎么设计数据表,DBA也不会去关心developer怎么设计实体类。他们可能同处在一个项目组中,可行其职,最优化的设计自己的方案而互不影响充分的解耦,而交互的工作就由EntityFramework进行处理了。
层
Entity Data Model 由概念层,存储层,映射层构成,每一层都是相互独立的。
其中实体类是包含在概念层【conceptual layer】中,而这一层也是开发人员最关心的。也可以利用EntityFramework自带的工具进行反向工程,即从已存在的数据库创建实体类,其所用的语法为概念架构定义语言【CSDL】。
实体数据模型的存储层定义表,列,关系和数据类型如何映射到底层数据库。其所用的语法为存储架构定义语言(SSDL).
映射层定义的概念和存储层之间的映射。除此之外,这层定义了如何从实体类的属性映射到数据库表中的列。这个层被暴露给开发者,developer可以利用EntityFramework设计映射详细信息的窗口或者数据注解的方式以及如果使用Code Frist方式时可利用Fluent API进行定义,其所用的语法为映射规范语言(MSL)
术语

EntityType代表域模型中的一个类。EntityType的一个实例是通常被称为一个实体。如果您使用的是EntityFramework的设计器,可以看到如上图所示的表示。EntityType通常有一个或多个属性。属性可以是简单的类型,如整型,字符串,等等;或者复杂类型;或者是集合。导航属性用于关联其他相关实体(通常通过外键关系数据库中的表示)。非导航属性被称为标量属性。
两个实体之间的关系被称为关联。EntityTypes之间的关联显示在设计视图中是连接EntityTypes的一条线。
EntityType有一个属性或一组属性代表其的EntityKey属性。一个的EntityKey唯一标识该实体,它最常被映射到底层数据库的一个主键 。
context object 是获取EntityFramework服务的网关。管理数据库连接,生成参数化SQL,执行数据存取,缓存对象,跟踪和抽象数据转换为包含具体的参数类型的实体类。
DbContext 是对EntityFramework支持的ObjectContext的一种包装,因而更加直观,友好。

怎么编码
1.EF/VS借力于T4模板自动生成代码
2.使用CodeFrist的模式手动编写独立于EntityFramework管道的POCO类【也可借助Entity Framework Power Tool反向生成】。
序言<EntityFramework6.0>的更多相关文章
- 使用简介<EntityFramework6.0>
序言 在这一篇中,我们将演示EnitityFramework基本的建模[建模也是EntityFramework最核心的特性]范例,例如实体的分离和继承等.我们开始了演示如何创建一个简单的概念模型的例子 ...
- 分割一个表到多个实体<EntityFramework6.0>
声明方式 public class Photograph { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public in ...
- 继承映射关系 TPH、TPT、TPC<EntityFramework6.0>
每个类型一张表[TPT] 声明方式 public class Business { [Key] public int BusinessId { get; protected set; } public ...
- 将一个实体数据保存到不同的数据表中<EntityFramework6.0>
2014-11-22声明方式 public class Product { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public ...
- 自连接<EntityFramework6.0>
自引用 public class PictureCategory { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ...
- 多对多关系<EntityFramework6.0>
无负载建立多对多关联的模型 原文中是Modeling a Many-to-Many Relationship with No Payload,虽然这么翻译也有点不准确,但是可以说明其目的,如下图所示, ...
- EntityFramework6.0的Sql读写分离拦截器 和 MVC的 Action拦截器 对比
EF的DbCommandInterceptor类 拦截: EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Int ...
- 升级实体框架EntityFramework6.0
首先安装nuget 管理器 https://visualstudiogallery.msdn.microsoft.com/4ec1526c-4a8c-4a84-b702-b21a8f5293ca 安装 ...
- Nopcommerce 二次开发0
Nopcommerce 是国外的一个高质量的开源b2c网站系统,基于EntityFramework6.0和MVC5.0,使用Razor模板引擎,有很强的插件机制,包括支付配送功能都是通过插件来实现的 ...
随机推荐
- jQuery文本框中的事件应用
jQuery文本框中的事件应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- ubuntu mysql使用
用navicat远程连不上mysql,提示10061错误解决办法: 修改/etc/mysql/my.cnf文件,找到127.0.0.1行,注释该行 命令:vi my.cnf 按i键进入编辑模式 编辑完 ...
- 关于springMVC+Mybatis jar包详解
1.Aopalliance.jar: 这个包是AOP联盟的API包,里面包含了针对面向切面的接口,通常spring等其它具备动态织入功能的框架依赖此包. 2.aspectjweaver-1.7.1.j ...
- c++文件输入输出流fstream,对输入>>和输出<<重载
1. fstream 继承自iostream --> 要包含头文件#include<fstream> 2. 建立文件流对象 3. 打开文件夹 4. 测试是否打开成功 5. 进行读写操 ...
- javascript (2)
1.javascript作为一种脚本语言可以放在html页面中任何位置,但是浏览器解释html时是按先后顺序的,所以前面的script就先被执行.比如进行页面显示初始化的js必须放在head里面,因为 ...
- Mysql安装及主从复制配置
1.下载 mysql数据库 wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.9-linux-glibc2.5-x86_64.ta ...
- 百度地图多点路径加载以及调整页面js
$(document).ready(function () { /*用正则表达式获取url传递的地址参数,split后获得地址数组*/ bmap = new BMap.Map('mapcontaine ...
- 一些有趣的Javascript技巧
整理一些刷题时学会的小技巧…… 目录: 即大于0又小于0的变量 String.split() 与 正则表达式 缓存的几种方法 初始化一个数组 即大于0又小于0的变量 问题: 设计一个变量val,使得以 ...
- 读一篇Javascript问题贴的收获
遇到这篇文章<Javascript异步调用时,回调函数内用到了函数外的变量>,是缘于我在<难道这就是JavaScript中的"闭包">文章中遇到的问题时,B ...
- 基础知识《十》unchecked异常和checked异常
运行时异常在运行期间才能被检查出来,一般运行期异常不需要处理.也称为unchecked异常.Checked异常在编译时就能确定,Checked异常需要自己处理. checked 异常也就是我们经常遇到 ...