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有一个延迟加载的技术. 如果你是一个老鸟,你可能了解一些,如果下面的学习过程中哪些方面讲解的不对,欢迎批评指教.如果一个菜鸟,那我 ...
随机推荐
- POJ1080 Human Gene Functions(LCS)
题目链接. 分析: 和 LCS 差不多. #include <iostream> #include <cstdio> #include <cstdlib> #inc ...
- 前端问题——png图片在IE6下透明失效,解决办法
今天,一位同事问我问题,png 图片在IE6下透明背景失效. 解决办法,在网上查了很多,最后还是采用两种方案来解决这个问题 1.把这个网页的png格式图片变更为gif格式的图片.问题解决 2.就是让这 ...
- 【2013杭州区域赛】部分题解 hdu4770—4780
1008: 题意: 有20W个数,每个数都在20W以内,现在有20W个询问,每次询问L,R区间内不会打架的数有多少个 定义两个数不互质 就会打架 解法: 脑洞很大的一道题,先要进行预处理,对每一个数预 ...
- puppet常用调试命令
yum快速部署puppet测试环境(C/S端) rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm yum r ...
- codeforces MemSQL start[c]up Round 2 - online version B 最长公共子系列
题目链接: http://codeforces.com/contest/335/problem/B 分析: 第一眼看上去串的长度为5*10^4, 冒似只能用O(n)的算法可解. 而这样的算法从来没见 ...
- Python logging模块详解
简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warni ...
- rman catalog (rman 恢复目录)
受控制文件大小的限制,一般rman需要用rman catalog来管理及存放备份信息: 这里介绍一下创建rman catalog的步骤: C:\Documents andSettings\Admini ...
- 从零开始写一个Tomcat(贰)--建立动态服务器
上文书说道如何通过http协议建立一个静态的服务器来访问静态网页,但我们选择tomcat最主要的原因还是因为它能动态的执行servlet,这边文章将引导你实现一个能够运行servlet的服务器,这个简 ...
- C++输出hello world 详细注释
/* #include<iostream> #:预处理标志,后面跟预处理指令,include:预处理指令,包含 <iostream>:c++头文件,输入输出流 这行的作用就是在 ...
- MyEclipse保存文件时 自动格式化代码! 不包括文档注释
设置不格式化 文档注释