一. 整体说明
1. 本节用到的表
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 }