日期:2014-05-20  浏览次数:20820 次

Entity Framework 实体框架综述

         Entity Framework 实体框架综述

ADO.NET Entity Framework 是微软以ADO,NET 为基础所发展出来的对象关系对应的解决方案。

一、产生背景

 它是随着面向对象的软件开发方法发展而产生的。对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此ORM一般以中间件的形式存在,主要实现程序对象到关系数据库的映射。像HibernateNHibernate都是这个技术下的产物,但微软没有这样的对象对应工具,为了有这样的工具,微软开发了ADO.NET Entity Framework.

二、发展历程

  微软在.NET Framework2.0发展时期,提出了ObjectSpace的概念,其技术与NHibernate相似,但ObjectSpace因为工程相当大所以在.NET Framework 2.0完成时ObjectSpace未完成,因此微软将它纳入下一版本的.NET Framework中,并加上了设计工具(Desinger),构成了现在的ADO.NET Entity Framework.

三、应用场景

  用ADO.NET Entity Framework自动为我们生成DAL代码,ADO.NET Entity Framework可以进行保存、添加、删除、修改、读取对象。ADO.NET Entity Framework负责生成SQL,我们只需要关注对象就好了,而不需费心关注数据库结构。

四、体系结构

五、主要模块与类

实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。                  概念架构定义语言文件 (.csdl) -- 定义概念模型。                  存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型)。                 映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射。

重要的类:

1、ObjectContextObjectContext封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。

2、ObjectQuery:有个有用的方法ToTraceString(),这个方法用于追踪所执行的SQL语句,通过此方法我们可以获取所执行的SQL语句,以便我们查看、分析具体执行的SQL语句

3、ObjectStateEntryObjectStateEntry维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表

4、ObjectStateManagerObjectStateManager用于维护对象映射、对象状态/标识管理以及实体实例或关系实例的持久性。

 

六、CRUD典型的代码:增、删、查、改

1、根据学院ID获取年级列表

_context.Classes.Where(c => c.SchoolID == schoolId).Select(c => c.Grade).Distinct().ToList()

2.根据班级ID获取班级信息

return _context.Classes.FirstOrDefault(c => c.ClassID == id)

3、添加班级

_context.Classes.Add(entity);

  int i = _context.SaveChanges()

4、删除班级

 _context.Entry<Class>(entity).State=

System.Data.EntityState.Deleted;

int i = _context.SaveChanges()

5、修改班级

 _context.Classes.Attach(entity);

_context.Entry<Class>(entity).State=

System.Data.EntityState.Modified

  int i = _context.SaveChanges()