EF学习
一、EF介绍
实体框架 Entity Framework 是ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。在 EF 中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
概念架构定义语言文件 (.csdl) -- 定义概念模型。
存储架构定义语言文件 (.ssdl) -- 定义存储模型(又称逻辑模型)。
映射规范语言文件 (.msl) -- 定义存储模型与概念模型之间的映射。
实体框架 使用这些基于 XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM甚至支持将概念模型中的实体映射到数据源中的存储过程。它提供以下方式用于查询 EDM 并返回对象:
LINQ to Entities --提供语言集成查询 (LINQ) 支持用于查询在概念模型中定义的实体类型。
Entity SQL -- 与存储无关的 SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等 EDM 功能。
查询生成器方法 --可以使用 LINQ 风格的查询方法构造 Entity SQL 查询。
二、EF的基本使用方法
1.首先,建立一个名为“EFtest1”的解决方案,然后添加一个名为“EFModel”的类库项目。
2.接着,在 EFModel 项目中,添加“ADO.NET Entity Data Model”项目,如下图所示:
3.在后面的步骤中,选择数据库后,在选择数据库对象,把表、试图、存储过程全部都选上,如下图所示。:
4.完成后如下图
三、ObjectContext、ObjectQuery、ObjectStateEntry、ObjectStateManager类的介绍
这个几个比较重要的类,它们都位于 System.Data.Entity.dll下的 System.Data.Objects 命名空间下。
1.ObjectContext 封装 .NET Framework 和数据库之间的连接。此类用作“创建”、“读取”、“更新”和“删除”操作的网关。
ObjectContext 类为主类,用于与作为对象(这些对象为 EDM 中定义的实体类型的实例)的数据进行交互。
ObjectContext 类的实例封装以下内容:
到数据库的连接,以 EntityConnection 对象的形式封装。
描述该模型的元数据,以 MetadataWorkspace 对象的形式封装。
用于管理缓存中持久保存的对象的 ObjectStateManager 对象。
描述该模型的元数据,以 MetadataWorkspace 对象的形式封装。
用于管理缓存中持久保存的对象的 ObjectStateManager 对象。
ObjectContext 类的成员方法以说明如下所示:
| AcceptAllChanges() | 接受所有对该实体对象的更改 |
| AddObject(string,object) | 将实体对象添加到制定的实体容器中 |
| ApplyPropertyChanges(string,object) | 将以指派的实体对象属性的更改应用到容器中对应的原对象。 |
| Attach(System.Data.Objects.DataClasses.IEntityWithKey entity) | 将带主键的实体对象附加到默认的容器中 |
| Attach(string,object) | 将实体对象附加到指定的实体容器中 |
| CreateEntityKey(string,object) | 给指定的实体对象创建实体主键或如果已存在实体主键,则直接返回该实体的主键 |
| CreateQuery<T>(string,params ObjectParameter[]) | 从给定的查询字符串创建 ObjectQuery 对象。 |
| DeleteObject(object) | 删除指定的实体对象 |
| Detach(object) | 移除指定的实体对象 |
| ExecuteFunction<TElement>(string,params ObjectParameter[]) | 对默认容器执行给定的函数。 |
| GetObjectByKey(System.Data.EntityKey key) | 通过主键 KEY 从 ObjectStateManager 中检索对象(如果存在);否则从存储区中检索。 |
| Refresh(System.Data.Objects.RefreshMode refreshMode, object entity) | 按指定持久更新模式,使用指定实体的存储区数据更新 ObjectStateManager。。 |
| Refresh(System.Data.Objects.RefreshMode refreshMode, System.Collections.IEnumerable collection) | 按指定持久处理模式,使用指定实体集的存储区数据更新 ObjectStateManager。 |
| SaveChanges(bool) | 将所有更新持久保存到存储区中。参数是客户端事务支持所需的参数。参数为 true则在更新后自动将更改应用到 ObjectStateManager 中的实体。如果为false,则在更新后还需要调用 AcceptAllChanges()以便更新ObjectStateManager 中的实体。 |
| SaveChanges() | 将所有更新持久保存到存储区中 |
| TryGetObjectByKey(System.Data.EntityKey,out object) | 尝试从指定实体主键返回该实体 |
2.类 ObjectQuery
ObjectQuery 有个有用的方法ToTraceString(),这个方法用于追踪所执行的 SQL 语句,通过此方法我们可以获取所执行的 SQL 语句,以便我们查看、分析具体执行的 SQL 语句。
3.ObjectStateEntry
ObjectStateEntry 维护实体实例或关系实例的状态(已添加、已删除、已分离、已修改或未更改)、键值和原始值。还管理已修改属性的列表。其包含以下方法:
| AcceptChanges | 接受当前值作为原始值,并将实体标记为 Unchanged()。 |
| Delete | 将实体标记为 Deleted()。如果实体处于 Added()()() 状态,它将为 Detached()。 |
| GetModifiedProperties | 返回标记为 Modified()的属性名称。 |
| SetModified | 将状态设置为 Modified()。 |
| SetModifiedProperty | 将指定的属性标记为 Modified() |
4.ObjectStateManager。
ObjectStateManager 用于维护对象映射、对象状态/标识管理以及实体实例或关系实例的持久性。
GetObjectStateEntries:获取给定 EntityState 的 ObjectStateEntry 集合。
GetObjectStateEntry:获取给定的 EntityKey 对应的ObjectStateEntry。
EF学习的更多相关文章
- 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2
接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...
- EF学习笔记(十二):EF高级应用场景
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...
- EF学习笔记(十一):实施继承
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里, ...
- EF学习笔记(十) 处理并发
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(九):异步处理和存储过程 本篇原文链接:Handling Concurrency Concurrency ...
- EF学习笔记(九):异步处理和存储过程
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇:EF学习笔记(八):更新关联数据 本篇原文:Async and Stored Procedures 为何要采用异步? ...
- EF学习笔记(八):更新关联数据
学习笔记主目录链接:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上一篇链接:EF学习笔记(七):读取关联数据 本篇原文链接:Updating Related Data 本篇主要考 ...
- EF学习和使用综合
一.(引)你必须知道的EF知识和经验 二.(引)EF学习和使用(七)EF性能优化篇 三.(引)采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延 ...
- EF学习笔记(七):读取关联数据
总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本篇参考原文链接:Reading Related Data 本章主要讲述加载显示关联数据: 数据加载分为以下三种 Lazy l ...
- ef学习一
学习内容:https://www.cnblogs.com/5ishare/p/5801229.html 注意点: 1.NuGet程序包引入ef,使用DbSet<>必须引入ef.本例EFCo ...
- ado.net EF学习系列----深入理解查询延迟加载技术(转载)
ado.net EF是微软的一个ORM框架,使用过EF的同学都知道EF有一个延迟加载的技术. 如果你是一个老鸟,你可能了解一些,如果下面的学习过程中哪些方面讲解的不对,欢迎批评指教.如果一个菜鸟,那我 ...
随机推荐
- "红色病毒"问题 HDU 2065 递推+找循环节
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态 ...
- 多线程同步、异步(BeginInvoke)
一.线程的基础知识 1 System.Threading.Thread类 System.Threading.Thread是用于控制线程的基础类,通过Thread可以控制当前应用程序域中线程的创建.挂起 ...
- J - Air Raid - hdu 1151(最小边覆盖)
题意:给一个有向无环图,求出来最少需要几个士兵可以遍历所有的边. 分析:有向无环图的最小边覆盖 = 点数 - 最大匹配数 为什么是这样的公式??可以思考一下,如果这N个点之间没有边,是不是应该有N个士 ...
- jenkins 设置权限后管理员登陆提示:Access Denied admin没有Overall/Read权限
jenkins 设置权限后,管理员登陆提示:Access Denied admin没有Overall/Read权限 处理办法: window下编辑 xml 配置文件: %userprofile%\. ...
- AFNetworking (3.1.0) 源码解析 <二>
这次讲解AFHTTPSessionManager类,按照顺序还是先看.h文件,注释中写到AFHTTPSessionManager是AFURLSessionManager的子类,并且带有方便的HTTP请 ...
- IE 文档模型设置 免去你IE 按F12去调文档标准的烦恼。
英文原文:http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx 最近在做一个前端页面,在各种浏览器上,各种差异,各种无赖.各种郁闷. ...
- Android Studio中自己定义快捷输入块
快捷键:Ctrl + Alt + s,进入Settings >Editor>Live Templates>output中加入一个项,选择第一个Live Template waterm ...
- 标C编程笔记day06 动态分配内存、函数指针、可变长度參数
动态分配内存:头文件 stdlib.h malloc:分配内存 calloc:分配内存,并清零 realloc:调整已分配的内存块大小 演示样例: in ...
- CCDictionary&CCArray执行retain()重要点
CCDictionary也需要执行retain(),否则则跟CCArray,返回则释放对象. 在Lua中,忘记了retain(),导致一些出现gCCDictionary:objectForKey(ke ...
- [转] When exactly does the virtual table pointer (in C++) gets set for an object?
PS: http://stackoverflow.com/questions/7934540/when-exactly-does-the-virtual-table-pointer-in-c-gets ...