日期:2014-05-20 浏览次数:20820 次
ADO.NET Entity Framework 是微软以ADO,NET 为基础所发展出来的对象关系对应的解决方案。
一、产生背景
它是随着面向对象的软件开发方法发展而产生的。对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此ORM一般以中间件的形式存在,主要实现程序对象到关系数据库的映射。像Hibernate或NHibernate都是这个技术下的产物,但微软没有这样的对象对应工具,为了有这样的工具,微软开发了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、ObjectContext:ObjectContext封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。
2、ObjectQuery:有个有用的方法ToTraceString(),这个方法用于追踪所执行的SQL语句,通过此方法我们可以获取所执行的SQL语句,以便我们查看、分析具体执行的SQL语句
3、ObjectStateEntry:ObjectStateEntry维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表
4、ObjectStateManager:ObjectStateManager用于维护对象映射、对象状态/标识管理以及实体实例或关系实例的持久性。
六、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()