EntityFramework EF狀態跟蹤和各種查詢


 //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();
                    }
                }
            }
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM