EFCore (二)之 跟踪实体

2022-11-26,,

核心

SaveChanges()

“已分离”和“未改变”的实体,SaveChanges()忽略;

“已添加”的实体,SaveChanges() 插入数据库;

“已修改”的实体,SaveChanges() 更新到数据库;

“已删除”的实体,SaveChanges() 从数据库删除

快照更改跟踪

这是EFCore 默认的一个机制

首次跟踪一个实体的时候,EFCore 会创建这个实体的快照。在执行SaverChanges()等方法的时候,EFCore会把存储的快照中的值于实体的当前值进行比较

实体跟踪的小技巧

个人不推荐使用

一般我们执行修改某个对象的时候,EFCore的操作是先查询出来这个对象,然后对某个值进行修改 最后调用SaveChanges()

例如:

var item = dbContext.Test.Single(r=> r.Id == 1);

item.Name = "新值"

dbContext.SaveChanges()

生成一条SQL 如下

Test item = new Test{id=1,Name="new"}

var entry = dbContext.Entry(item);

entry.Property("Name").IsModified = true;

dbContext.SaveChanges()

先查在改,最终会生成两个Sql语句:一个是 Select Id为 1;然后会生成一个Update 语句 去修改这个Id 为 1 的行

后面这个使用跟踪实体 改为 Modified Name 字段,最终生成只会标识Modified 为修改跟踪

EFCore (二)之 跟踪实体的相关教程结束。

《EFCore (二)之 跟踪实体.doc》

下载本文的Word格式文档,以方便收藏与打印。