//EntityState 四種狀態 //1.Detached 實體跟上下文沒有關系 //2.Detached 監聽中 但是無修改 //3.Added 插入數據 //4.Modified 更新數據 //5.MDeleted 刪除數據 public class EFStateTest { public static void Show() { try { Llogin llogin = new Llogin() { id1 = 8, name1 = "zhangsan", nameCH = "張三", psw = "/7k8sVej5hE=", qx = "系統管理員", department = "01", TPFW = "0", DepartNumber = "01" }; { using (CodeFirst context = new CodeFirst()) { llogin.nameCH = "李四"; Console.WriteLine(context.Entry<Llogin>(llogin).State); //實體跟context沒關系 Detached context.SaveChanges(); //Detached啥事兒不發生 context.Set<Llogin>().Add(llogin); Console.WriteLine(context.Entry<Llogin>(llogin).State);//狀態變為 Added context.SaveChanges();//插入數據(自增主鍵在插入成功后,會自動賦值過去) Console.WriteLine(context.Entry<Llogin>(llogin).State);// Unchanged(監聽,但是沒變化) llogin.nameCH = "李四123"; Console.WriteLine(context.Entry<Llogin>(llogin).State);//狀態變為 Modified context.SaveChanges(); //更新數據庫,因為狀態是Modified Console.WriteLine(context.Entry<Llogin>(llogin).State);// Unchanged(監聽,但是沒變化) context.Set<Llogin>().Remove(llogin); Console.WriteLine(context.Entry<Llogin>(llogin).State); //狀態變為 MDeleted context.SaveChanges();//刪除數據,因為狀態是Deleted Console.WriteLine(context.Entry<Llogin>(llogin).State);//Detached已經從內存移除了 } } { using (CodeFirst context = new CodeFirst()) { llogin.nameCH = "李四897"; Console.WriteLine(context.Entry<Llogin>(llogin).State); //實體跟context沒關系 Detached context.Entry<Llogin>(llogin).State = EntityState.Modified;//全字段更新 Console.WriteLine(context.Entry<Llogin>(llogin).State); //狀態變為 Modified context.SaveChanges();//更新數據庫,因為狀態是Modified } } { using (CodeFirst context = new CodeFirst()) { Console.WriteLine(context.Entry<Llogin>(llogin).State); //實體跟context沒關系 Detached context.Set<Llogin>().Attach(llogin); //使用Attach增加監聽 Console.WriteLine(context.Entry<Llogin>(llogin).State);// Unchanged(正在監聽,但是沒變化) llogin.nameCH = "李四897000"; //只更新這個字段 Console.WriteLine(context.Entry<Llogin>(llogin).State);//狀態變為 Modified context.SaveChanges();//更新數據庫 } } { //Find可以使用緩存,優先從內存查找(限於context) //AsNoTracking() 返回數據不會緩存,加一個可以提升性能 using (CodeFirst context = new CodeFirst()) { var login = context.Set<Llogin>().Where(l => l.id1 < 7).ToList(); //var login = context.Set<Llogin>().Where(l => l.id1 < 7).AsNoTracking().ToList(); var login1 = context.Set<Llogin>().Find(2); //從緩存中查找 var login2 = context.Set<Llogin>().Find(8); //緩存中沒有再從數據庫中查詢 var login3 = context.Set<Llogin>().FirstOrDefault(l => l.id1 == 2);//從數據庫查詢 } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } }
public class EFQueryTest { public static void Show() { using (CodeFirst dbContext = new CodeFirst()) { //in查詢 { var list = dbContext.L_login.Where(u => new int[] { 1, 2, 3 }.Contains(u.id1));//in查詢 foreach (var user in list) { Console.WriteLine(user.nameCH); } } { //沒有任何差別,只有寫法上的熟悉 var list = from u in dbContext.L_login where new int[] { 1, 2, 3 }.Contains(u.id1) select u; foreach (var user in list) { Console.WriteLine(user.nameCH); } } //分頁 { var list = dbContext.L_login.Where(u => new int[] { 1, 2, 3, 4, 5 }.Contains(u.id1)) .OrderBy(u => u.id1) .Select(u => new { name = u.nameCH, Pwd = u.psw }).Skip(3).Take(5); foreach (var user in list) { Console.WriteLine(user.name); } } { var list = (from u in dbContext.L_login where new int[] { 1, 2, 3, 4, 5 }.Contains(u.id1) orderby u.id1 select new { name = u.nameCH, Pwd = u.psw }).Skip(2).Take(3); foreach (var user in list) { Console.WriteLine(user.name); } } //模糊查詢 { var list = dbContext.L_login.Where(u => u.nameCH.StartsWith("孔") && u.nameCH.EndsWith("穎")) .Where(u => u.nameCH.EndsWith("穎")) .Where(u => u.nameCH.Contains("孔新穎")) .Where(u => u.nameCH.Length < 5) .OrderBy(u => u.id1); foreach (var user in list) { Console.WriteLine(user.nameCH); } } //join { var list = (from a in dbContext.L_login join b in dbContext.L_DepartMent on a.DepartNumber equals b.DepartNumber where new int[] { 1, 2, 3, 4, 6, 7, 8 }.Contains(a.id1) select new { name = a.nameCH, department = b.DepartMent, id = a.id1 }).OrderBy(u => u.id); foreach (var item in list) { Console.WriteLine("{0} {1}", item.name, item.department); } } { var list = from a in dbContext.L_login join b in dbContext.L_DepartMent on a.DepartNumber equals b.DepartNumber into abList from ab in abList.DefaultIfEmpty() where new int[] { 1, 2, 3, 4, 6, 7, 8 }.Contains(a.id1) select new { name = a.nameCH, department = ab.DepartMent, pws = a.psw }; foreach (var item in list) { Console.WriteLine("{0} {1} {2}", item.name, item.department, item.pws); } } } //sql語句查詢 using (CodeFirst dbContext = new CodeFirst()) { { DbContextTransaction trans = null; try { trans = dbContext.Database.BeginTransaction(); string sql = "Update [L_login] Set Name='張三' WHERE Id=@Id"; SqlParameter parameter = new SqlParameter("@Id", 3); dbContext.Database.ExecuteSqlCommand(sql, parameter); trans.Commit(); } catch (Exception ex) { if (trans != null) trans.Rollback(); throw ex; } finally { trans.Dispose(); } } { DbContextTransaction trans = null; try { trans = dbContext.Database.BeginTransaction(); string sql = "SELECT * FROM [L_login] WHERE Id=@Id"; SqlParameter parameter = new SqlParameter("@Id", 3); List<Llogin> userList = dbContext.Database.SqlQuery<Llogin>(sql, parameter).ToList<Llogin>(); trans.Commit(); } catch (Exception ex) { if (trans != null) trans.Rollback(); throw ex; } finally { trans.Dispose(); } } } } }