01-Entity FrameWork如何控制数据的变化
2016-12-04 23:57
267 查看
在Entity Framework所有操作数据就是更新EF容器中的实体状态
1、新增
调用Add方法,实际上就是将实体状态改为added,然后通过saveChanges()保存到数据库
2、编辑
--第一种方法:
-- 1、与实体字段的值作比较,如果值不变,则不会产生update-sql语句
-- 2、修改了某个字段值,update sql语句只会set 修改某个字段,不会修改全部字段
-- 3、查询2次数据库
--第二种方法:
--1、将一个游离的实体 追加到 EF 容器中
-- 2、将EF实体状态改为Modified
-- 3、修改所有的字段,无论是否变化
--第三种方法(综合前两种修改方法):
--查询1次数据库
--修改指定的字段
3、删除亦是如此
4、源码
--每一种数据的变化,都会有相应的集合来保存这些实体的变化
如:ObjectStateManager
Dictionary<EntityKey, EntityEntry> _addedEntityStore
Dictionary<EntityKey, EntityEntry> _deletedEntityStore
Dictionary<EntityKey, EntityEntry> _unchangedEntityStore
Dictionary<EntityKey, EntityEntry> _modifiedEntityStore
--当实体变化发生改变时候,调用AddEntityEntryToDictionary,插入到集合中
--调用saveChange(),就会去获取这些变化,进行操作数据
public enum EntityState { Added = 4, Deleted = 8, Detached = 1, Modified = 0x10, Unchanged = 2 }
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 = 36, 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 = 36, 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(),就会去获取这些变化,进行操作数据
相关文章推荐
- 如何从数据库中行显示数据(可以控制列的数量)
- PB如何在Datawindow(数据窗口)中控制列的修改方式
- 如何反映主数据的历史变化?(转)
- 如何展示主数据的历史变化(一)
- jqGrid 如何控制分页显示以及数据条数。
- Java如何从控制台中读取数据
- oracle中如何移动控制文件,数据文件,日志文件
- Excel问题处理,如何实现数据表的单元格数值的动态变化。
- 子线程如何获取和设置 或者控制窗口实时显示数据(网上的资料经个人整理拼凑总结)
- 如何通过使用 VisualC # .NET /VB.NET 向打印机发送数据/控制命令
- VFP如何控制一个窗口的所有控件的大小随窗口的变化而变化
- Saber中如何控制TR分析的仿真数据大小
- 表A中的记录随时变化,程序显示A数据的界面中如何自动也跟着刷新?
- 如何使用Oracle ORDER BY语句控制空数据
- 如何让用户控制输出数据的小数点后保留的位数
- [JavaScript]如何控制页面框架大小变化
- 0CORDMODE如何控制上传数据
- 如何控制excel单元格的数据类型
- 如何控制matlab中的数据输出格式? 改变输出位数精度
- oracle中如何移动控制文件,数据文件,日志文件