01-Entity FrameWork如何控制数据的变化
在Entity Framework所有操作数据就是更新EF容器中的实体状态
public enum EntityState
{
Added = ,
Deleted = ,
Detached = ,
Modified = 0x10,
Unchanged =
}
1、新增
StudentAddress address = new StudentAddress
{
Address = "地址" + DateTime.Now
};
db.StudentAddress.Add(address);
Console.WriteLine(db.Entry<StudentAddress>(address).State);//added
db.SaveChanges();
调用Add方法,实际上就是将实体状态改为added,然后通过saveChanges()保存到数据库
StudentAddress address = new StudentAddress
{
Address = "地址" + DateTime.Now
}; db.Entry<StudentAddress>(address).State = System.Data.Entity.EntityState.Added;
db.SaveChanges();
2、编辑
--第一种方法:
var address2 = db.StudentAddress.FirstOrDefault();
address2.Address = "ModifyFromEf2";//Modified
db.SaveChanges();
-- 1、与实体字段的值作比较,如果值不变,则不会产生update-sql语句
-- 2、修改了某个字段值,update sql语句只会set 修改某个字段,不会修改全部字段
-- 3、查询2次数据库

--第二种方法:
StudentAddress address = new StudentAddress
{
Id = ,
Address = "update地址"
}; //1、追加到EF容器中,状态为Detached
var entityEntry = db.Entry(address);//Detached
entityEntry.State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
--1、将一个游离的实体 追加到 EF 容器中
-- 2、将EF实体状态改为Modified
-- 3、修改所有的字段,无论是否变化

--第三种方法(综合前两种修改方法):
--查询1次数据库
--修改指定的字段
//1、追加到EF容器中,状态为Detached
var entityEntry = db.Entry(address);//Detached
Console.WriteLine("追加到EF容器:" + entityEntry.State); //2、修改指定字段Unchanged-->指定字段为修改
db.StudentAddress.Attach(address);//相当于entry.State = System.Data.EntityState.Unchanged;
Console.WriteLine("Attach-Unchanged:" + entityEntry.State); //Unchanged entityEntry.Property("Address").IsModified = true;
Console.WriteLine("修改后状态:" + entityEntry.State); //Modified db.SaveChanges();

3、删除亦是如此
StudentAddress address = new StudentAddress
{
Id = ,
Address = "u222pdate地址" + DateTime.Now
};
db.StudentAddress.Attach(address);//Detached db.StudentAddress.Remove(address);//或将其状态修改为:EntityState.Deleted;
db.SaveChanges();
4、源码
--每一种数据的变化,都会有相应的集合来保存这些实体的变化
如:ObjectStateManager
Dictionary<EntityKey, EntityEntry> _addedEntityStore
Dictionary<EntityKey, EntityEntry> _deletedEntityStore
Dictionary<EntityKey, EntityEntry> _unchangedEntityStore
Dictionary<EntityKey, EntityEntry> _modifiedEntityStore

--当实体变化发生改变时候,调用AddEntityEntryToDictionary,插入到集合中

--调用saveChange(),就会去获取这些变化,进行操作数据

01-Entity FrameWork如何控制数据的变化的更多相关文章
- LINQ TO SQL和Entity Framework 的关系 你了解多少?
1. LINQ TO SQL 和EF 特点: LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射.其中包括的有DBFrist ...
- Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
9-3. 找出Web API中发生了什么变化 问题 想通过基于REST的Web API服务对数据库进行插入,删除和修改对象图,而不必为每个实体类编写单独的更新方法. 此外, 用EF6的Code Fri ...
- 《Entity Framework 6 Recipes》中文翻译系列 (45) ------ 第八章 POCO之获取原始对象与手工同步对象图和变化跟踪器
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-6 获取原始对象 问题 你正在使用POCO,想从数据库获取原始对象. 解决方案 ...
- Entity Framework使用EntityState和Attach来保存数据变化以及更新实体的个别字段
在使用Entity Framework作为ORM来存取数据的过程中,最常规的操作就是对数据对象的更新.本文将会包含如何Attach Entity到一个数据Context中,以及如何使用EntitySt ...
- Entity Framework基础01
学习了ADO.NET的相关知识,掌握了它对数据库表的基本操作,但是实际在开发项目应用中微软为我们开发ef这个ORM,使用它可以很方便的利用ADO.NET来操作DBMS,使得我们开发项目的着重点放在业务 ...
- Entity Framework 6 Recipes 2nd Edition(9-4)译->Web API 的客户端实现修改跟踪
9-4. Web API 的客户端实现修改跟踪 问题 我们想通过客户端更新实体类,调用基于REST的Web API 服务实现把一个对象图的插入.删除和修改等数据库操作.此外, 我们想通过EF6的Cod ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- Entity Framework 学习整理(分播客整理)
MSDN: http://msdn.microsoft.com/en-us/data/aa937723 台湾博客: http://www.dotblogs.com.tw/yc421206/ http: ...
- Entity Framework 基本概念
概念 LINQ to Entities 一种 LINQ 技术,使开发人员可以使用 LINQ 表达式和 LINQ 标准查询运算符,针对实体数据模型 (EDM) 对象上下文创建灵活的强类型化查询. ESQ ...
随机推荐
- 洛谷 P1608 路径统计
P1608 路径统计 题目描述 “RP餐厅”的员工素质就是不一般,在齐刷刷的算出同一个电话号码之后,就准备让HZH,TZY去送快餐了,他们将自己居住的城市画了一张地图,已知在他们的地图上,有N个地方, ...
- how to read openstack code
本文的目的不是介绍openstack.我们这里假设你已经知道了openstack是什么,能够做什么.所以目的是介绍如何阅读openstack的代码.通过读代码来进一步学习openstack. 转载要求 ...
- C++之类的比較运算符的重载
比較运算符的重载通常有两种方式: 第一:作为成员函数重载 曾经几章的Student类为例: <span style="font-family:Microsoft YaHei;font- ...
- Windows系统下JAVA开发环境搭建
首先我们需要下载JDK(JAVA Development Kit),JDK是整个java开发的核心,它包含了JAVA的运行环境,JAVA工具和JAVA基础的类库. 下载地址:http://www.or ...
- yarn-cli 缓存
yarn cache list Yarn 会在你的用户目录下开辟一块全局缓存用以保存下载的包.yarn cache list 用于列出所有已经缓存的包. yarn cache dir 执行 yarn ...
- JavaSE入门学习5:Java基础语法之keyword,标识符,凝视,常量和变量
一keyword keyword概述:Java语言中有一些具有特殊用途的词被称为keyword.keyword对Java的编译器有着特殊的意义.在程 序中应用时一定要谨慎. keyword特点:组成k ...
- CSDN-markdown编辑器之从本机导入Markdown文件(二)
CSDN-markdown编辑器支持从本机导入Markdown文件的功能,假设你有从其他站点上下载的博客文章或说明文档,或是用软件编写的博客文章或说明文档.想公布到CSDN博客中,就能够使用本功能 ...
- web面试集合
在JavaScript中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能.导致这一问题的原因是多方面的.首先,每个函数都是对象,都会占用内存:内存中的对象越多,性能就越差.其次,必须事先 ...
- docker+zabbix,使用docker搭建zabbix服务
Zabbix 介绍 zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵 ...
- windows server 证书的颁发与IIS证书的使用 Dapper入门使用,代替你的DbSQLhelper Asp.Net MVC中Action跳转(转载)
windows server 证书的颁发与IIS证书的使用 最近工作业务要是用服务器证书验证,在这里记录下一. 1.添加服务器角色 [证书服务] 2.一路下一步直到证书服务安装完成; 3.选择圈选 ...