zoukankan      html  css  js  c++  java
  • 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();
                        }
                    }
                }
            }
        }
  • 相关阅读:
    R语言在最后一行追加字符
    linux系统中将每行特定数目字符后的字符替换为指定字符
    设定到那个层级上
    uv 一些常用
    编辑控件
    渲染点显示的 帮助
    直线y=x
    dotNetControl PictrueBox
    控件表
    颜色的东西
  • 原文地址:https://www.cnblogs.com/wangdash/p/12362738.html
Copyright © 2011-2022 走看看