一. 整体说明

1. 本节用到的表

 第二节:EF Core的常规“增删改”及状态的变化第二节:EF Core的常规“增删改”及状态的变化

2. 状态说明补充

 ①.Detached: 游离的状态,与数据库没有什么交涉,比如新new一个实体,状态就是Detached。

 ②.Added: 增加的状态。

 ③.Deleted: 删除的状态。

 ④.Modified: 修改的状态。

 ⑤.Unchanged: 与数据库内容相比,未发生变化时的状态,从数据库中查询出来的对象就是Unchanged状态。

PS:查询出来的实体,AsNoTracking一下,就变成Detached游离状态了 。

1  using (DbContext db = new EFDB01Context())
2  {
3    var d1 = db.Set<T_UserInfor>().Where(u => u.id == "01").FirstOrDefault();
4    Console.WriteLine(db.Entry(d1).State);   //Unchanged
5    var d2 = db.Set<T_UserInfor>().AsNoTracking().Where(u => u.id == "01").FirstOrDefault();
6    Console.WriteLine(db.Entry(d2).State);   //Detached
7  }

 

二. 增加

1. 原理

  修改实体到 Added 状态,调用 SaveChanges 时,生成 Insert 语句。

2. 几种增加情况

  (1). 新建实体,然后 db.Set<T>().Add(u1); 或者 直接db.Add()方法,状态变化为:Detached→Added→Unchanged

  (2). 新建实体,直接修改状态 EntityState.Added,状态变化为:Detached→Added→Unchanged

 1                     {
 2                         var u1 = new T_UserInfor()
 3                         {
 4                             id = Guid.NewGuid().ToString("N"),
 5                             userName = "ypf",
 6                             userSex = "",
 7                             userAge = 19,
 8                             addTime = DateTime.Now
 9                         };
10                         var u2 = new T_UserInfor()
11                         {
12                             id = Guid.NewGuid().ToString("N"),
13                             userName = "ypf2",
14                             userSex = "男2",
15                             userAge = 19,
16                             addTime = DateTime.Now
17                         };
18                         var state1 = db.Entry(u1).State;
19                         var state2 = db.Entry(u2).State;
20 
21                         db.Set<T_UserInfor>().Add(u1);
22                         db.Add(u2);
23 
24                         var state3 = db.Entry(u1).State;
25                         var state4 = db.Entry(u2).State;
26 
27                         int count = db.SaveChanges();
28 
29                         var state5 = db.Entry(u1).State;
30                         var state6 = db.Entry(u2).State;
31 
32                         Console.WriteLine($"count={count}");
33                         Console.WriteLine($"{state1}→{state3}→{state5}");
34                         Console.WriteLine($"{state2}→{state4}→{state6}");
35                     }
View Code

相关文章:

  • 2021-11-15
  • 2021-06-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
  • 2021-10-06
猜你喜欢
  • 2021-07-15
  • 2021-11-16
  • 2021-11-08
  • 2021-08-21
相关资源
相似解决方案