EntityFramework学习初级篇1--EF基本概况...............................................................2EntityFramework学习初级篇2--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍..................................................7EntityFramework学习初级篇3--LINQTOEntities............................................10EntityFramework学习初级篇4--EntitySQL............................................................17EntityFramework学习初级篇5--ObjectQuery查询及方法..................................23EntityFramework学习初级篇6--EntityClient.........................................................31EntityFramework学习初级篇7--基本操作:增加、更新、删除、事务...................37EntityFramework学习中级篇1—EF支持复杂类型的实现.........................................41EntityFramework学习中级篇2—存储过程(上)...........................................................47EntityFramework学习中级篇3—存储过程(中)...........................................................55EntityFramework学习中级篇4—存储过程(下)...........................................................61EntityFramework学习中级篇5—使EF支持Oracle9i............................................68EntityFramework学习高级篇1—改善EF代码的方法(上)....................................76EntityFramework学习高级篇2—改善EF代码的方法(下)....................................83EntityFramework学习结束语...........................................................................................86EntityFramework学习初级篇1--EF基本概况最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不是很完善,半成品。不过,据说在.Net4.0中,微软将推荐使用此框架,并会有所改善。而且,现在基本上所有数据库均提供了对EF的支持。因此,为以后做技术准备可以学习研究以下。但是,我个人觉得就目前来说,在实际项目慎用此框架。下面简单的介绍以下这个EF。在.NetFrameworkSP1微软包含一个实体框架(EntityFramework),此框架可以理解成微软的一个ORM产品。用于支持开发人员通过对概念性应用程序模型编程(而不是直接对关系存储架构编程)来创建数据访问应用程序。目标是降低面向数据的应用程序所需的代码量并减轻维护工作。EntityFramework应用程序有以下优点:应用程序可以通过更加以应用程序为中心的概念性模型(包括具有继承性、复杂成员和关系的类型)来工作。应用程序不再对特定的数据引擎或存储架构具有硬编码依赖性。可以在不更改应用程序代码的情况下更改概念性模型与特定于存储的架构之间的映射。开发人员可以使用可映射到各种存储架构(可能在不同的数据库管理系统中实现)的一致的应用程序对象模型。多个概念性模型可以映射到同一个存储架构。语言集成查询支持可为查询提供针对概念性模型的编译时语法验证。实体框架EntityFramework是ADO.NET中的一组支持开发面向数据的软件应用程序的技术。在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。概念架构定义语言文件(.csdl)--定义概念模型。存储架构定义语言文件(.ssdl)--定义存储模型(又称逻辑模型)。映射规范语言文件(.msl)--定义存储模型与概念模型之间的映射。实体框架使用这些基于XML的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM甚至支持将概念模型中的实体映射到数据源中的存储过程。它提供以下方式用于查询EDM并返回对象:LINQtoEntities--提供语言集成查询(LINQ)支持用于查询在概念模型中定义的实体类型。EntitySQL--与存储无关的SQL方言,直接使用概念模型中的实体并支持诸如继承和关系等EDM功能。查询生成器方法--可以使用LINQ风格的查询方法构造EntitySQL查询。下图演示用于访问数据的实体框架体系结构:下面,来学习EF的基本使用方法。软件环境::VisualStudio2008+SP1SQLServer2005/2008首先,建立一个名为“EFProject”的解决方案,然后添加一个名为“EFModel”的类库项目。如下图所示。接着,在EFModel项目中,添加“ADO.NETEntityDataModel”项目,如下图所示:名称取为“NorthWindEF.edmx”,然后点击“添加”。然后,在后面的步骤中,数据库选择“NorthWind”后,在选择影射对象是,把表、试图、存储过程全部都选上,其他的均保存默认的即可。最终生成的结果如下图所示。好了,数据模型生成完毕。最后,谈谈我认为的一些缺点:Edmx包含了所有对象的csdl,ssdl,msl文件,过于庞大,如果要手动修改这个文件,一不小心,眼睛看花了,就改错了。(和数据集一样的毛病)。目前EF支持表、试图、存储过程,其他的对象不支持,而且对使用存储过程有很多限制(目前有EFExtension提供了更多对象的支持)。除了MSSQLServer可直接提供这种可视化的设计界面外,其他的数据库目前还没有提供可视化设计界面(但可以自己来实现,后面介绍)。性能问题。(网上看到有说比ADO.Net慢700百,又有人说比ADO.net快的,具体情况我还没测试过,但我觉得像这个些类型的框架,性能肯定是比上原生态的ADO.net慢)好了,接下来,学习以下简单的各种操作。EntityFramework学习初级篇2--ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍本节,简单的介绍EF中的ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager这个几个比较重要的类,它们都位于System.Data.Entity.dll下的System.Data.Objects命名空间下。在后续的章节中,我们经常会用到它们的某些方法,以便完成我们的某些操作或目的。本节,简单的说明一下以后我们可能会用到的各个类的方法,以方便我们后续的学习。ObjectContext封装.NETFramework和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。ObjectContext类为主类,用于与作为对象(这些对象为EDM中定义的实体类型的实例)的数据进行交互。ObjectContext类的实例封装以下内容:到数据库的连接,以EntityConnection对象的形式封装。描述该模型的元数据,以MetadataWorkspace对象的形式封装。用于管理缓存中持久保存的对象的ObjectStateManager对象。ObjectContext类的成员方法以说明如下所示:AcceptAllChanges()接受所有对该实体对象的更改AddObject(string,object)将实体对象添加到制定的实体容器中ApplyPropertyChanges(string,object)将以指派的实体对象属性的更改应用到容器中对应的原对象。Attach(System.Data.Objects.DataClasses.IEntityWithKeyentity)将带主键的实体对象附加到默认的容器中Attach(string,object)将实体对象附加到指定的实体容器中CreateEntityKey(string,object)给指定的实体对象创建实体主键或如果已存在实体主键,则直接返回该实体的主键CreateQueryT(string,paramsObjectParameter[])从给定的查询字符串创建ObjectQuery对象。DeleteObject(object)删除指定的实体对象Detach(object)移除指定的实体对象ExecuteFunctionTElement(string,paramsObjectParameter[])对默认容器执行给定的函数。GetObjectByKey(System.Data.EntityKeykey)通过主键KEY从ObjectStateManager中检索对象(如果存在);否则从存储区中检索。Refresh(System.Data.Objects.RefreshModerefreshMode,objectentity)按指定持久更新模式,使用指定实体的存储区数据更新ObjectStateManager。。Refresh(System.Data.Objects.RefreshModerefreshMode,System.Collections.IEnumerablecollection)按指定持久处理模式,使用指定实体集的存储区数据更新ObjectStateManager。SaveChanges(bool)将所有更新持久保存到存储区中。参数是客户端事务支持所需的参数。参数为true则在更新后自动将更改应用到ObjectStateManager中的实体。如果为false,则在更新后还需要调用AcceptAllChanges()以便更新ObjectStateManager中的实体。SaveChanges()将所有更新持久保存到存储区中TryGetObjectByKey(System.Data.EntityKey,outobject)尝试从指定实体主键返回该实体以上各个方法的具体用法,将在后面介绍。接着,再看看有用的类ObjectQuery。ObjectQuery有个有用的方法ToTraceString(),这个方法用于追踪所执行的SQL语句,通过此方法我们可以获取所执行的SQL语句,以便我们查看、分析具体执行的SQL语句。(类似Nhibernate配置文件中的showsql节)再了解一下ObjectStateEntry。ObjectStateEntry维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表。其包含一下方法:AcceptChanges接受当前值作为原始值,并将实体标记为Unchanged()。Delete将实体标记为Deleted()。如果实体处于Add