实体框架(EF6.X)是一种对象/关系映射器(O/R Mapping解决方案),一套支持开发面向数据的软件应用技术,采用特定域对象和关系数据形式使用数据,而不必考虑存储这些数据的基础数据库表和列,上层的用户端提供EntityClient、OjectContext及LinqToEntity支持
利用抽象化数据结构的方式,将每个数据库对象转换成应用程序对象(Entity),而数据字段都转换为属性(Property),关系则转换为结合属性(Association),使得数据库E/R模型完全的转成对象模型,EF中常见命名空间如下:
名称空间 |
说明 |
System.Data |
主要名称空间,包含了与实体相关的异常类,如MappingException |
System.Data.Common.CommandTrees |
包含由.NET数据提供程序共享的类,DbProviderServices类是一个抽象类,必须有EF提供程序实现 |
System.Data.Entity.Design |
包含由设计器用于创建EDM(实体数据模型)文件的类 |
System.Data.EntityClient |
指定.NET数据提供程序访问EF的类,EntityConnection,EntityCommand,EntityReader |
System.Data.Objects |
包含用于查询和更新数据库类,OjectContext类封装与数据库的连接,用于创建、读取、更新和删除方法的网关,ObjectQuery类表示对存储器的一个查询 |
System.Data.Objects.DataClasses |
包含实体需要的类和接口 |
Schema
数据逻辑层分为三方面:概念层结构(Conceptual Schema)、映射层结构(Mapping Schema )、存储层结构(Storage Schema )
l 概念层结构(Conceptual Schema)
CSDL将应用程序数据表示为概念模型中的一组实体和关系,定义了对象模型(Object Model),让上层应用可以面向对象方式访问数据,该层由CSDL(概念架构定义语言)定义
注意:
1) 所有实体都必须具有键,若数据库中未设置主键的表,那么系统会相应的推断实体的一个键
2) 仅包含外键、表示数据库中连接表之间的多对多关系的表在概念模型中没有对应的实体
l 映射层结构(Mapping Schema)
负责将上层的概念层结构及下层存储层机构中的成员结合在一起,以确认数据的来源与流向,该层由MSL(映射规范语言)把CSDL中的实体类型定义映射到SSDL上
l 存储层结构(Storage Schema )
负责与数据库管理系统DBMS中的数据表做实体对应,依不同数据库与数据结构,而显露出实体的数据结构体,和Provider一起,让数据可以输入正确的数据来源,或由正确的数据来源取出,该层由SSDL(存储架构定义语言)定义,描述了数据库表及其关系的结构
Entity Framework 主要是以Entity Model(EDM)为主体系架构如下:
Code-First
自从Entity Framework 4.1开始Code-First就是作为设计领域模型的主要方式,Code-First可以通过函数设计领域类与数据库中表的映射
当我们创建一个实体类且在通过dbset映射时,EF会将根据实体类中属性类型映射到数据库中的表中的相应类型