zoukankan      html  css  js  c++  java
  • C# EF增删改查

    1.增

    //1.创建一个EF数据上下文对象
    MyDBEntities context=new MyDBEntities();
    //2.将要添加的数据,封装成对象
     Users user = new Users() {Age = 22, Name = "Kim1"};
    //3.将改对象放入EF容器中,默认会为该对象加一个封装类对象(代理类对象)
    //用户对对象的操作,实际上是对代理类的操作
     //DbEntityEntry保存着实体状态,当对象被加入时,EF默认为该对象设置State的属性为unchanged
     DbEntityEntry<Users> entityEntry = context.Entry<Users>(user);
     //4.设置对象的标志位Added
     entityEntry.State=EntityState.Added;
      //5.当调用SaveChanges()时,EF会遍历所有的代理类对象,并根据标志生成相应的sql语句
      context.SaveChanges();
     Console.WriteLine("添加成功");

    2.删

    2.1根据Id(表的主键)删除

    MyDBEntities context=new MyDBEntities();
     Users user = new Users() {Id = 8};
    //将要删除的对象附加到EF容器中
     context.Users.Attach(user);
      //Remove()起到了标记当前对象为删除状态,可以删除
     context.Users.Remove(user);
      context.SaveChanges();
     Console.WriteLine("删除成功");

    2.2根据非主键删除

    //1.要删除的条件,这里是要删除name为Kim的项
     string name = "Kim";
    //2.获得name为Kim的对象
     var s1 = from s in context.Users
              where s.Name==name
              select s;
    //3.如果有多个的话就用foreach()遍历,这里就删除第一个
    context.Users.Remove(s1.FirstOrDefault());
    //4.保存到数据库
    context.SaveChanges();

    3.改

    //1.获得要更新后的数据,在mvc中的Action方法,可直接获得 更新后的对象
    Users u = new Users() { Id = 4, Name = "kim" };
    //2.标识为修改
    context.Entry<Users>(u).State = EntityState.Modified;
    //3.保存到数据库
    context.SaveChanges();

    3.1批量修改

    /// <summary>
    /// 批量编辑 数据
    /// </summary>
    /// <param name="model">要编辑成 的数据</param>
    /// <param name="whereLambda">where条件,输入lambda表示式</param>
    /// <param name="modefiedProNames">要修改的 属性名</param>
    /// <returns>修改的条数</returns>
    public int ModefyBy(Model.Users model, Expression<Func<Model.Users, bool>> whereLambda, params string[] modefiedProNames)
    {
         //1.查询要修改的数据
           List<Model.Users> listModefing = context.Users.Where(whereLambda).ToList();
          //获取 实体类 类型对象
            Type t = typeof(Model.Users);
           //获取 实体类 所有的 公共属性
            List<PropertyInfo> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
           //创建 实体属性 字典集合
            Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
           //将 实体属性 中要修改的属性名 添加到 字典集合中 键:属性名  值:属性对象
            proInfos.ForEach(p =>
           {
               if (modefiedProNames.Contains(p.Name))
               {
                    dictPros.Add(p.Name, p);
                }
            });
            //循环 要修改的属性名
              foreach (string proName in modefiedProNames)
             {
                //判断 要修改的属性名是否在 实体类的属性集合中存在
                  if (dictPros.ContainsKey(proName))
                 {
                     //如果存在,则取出要修改的 属性对象
                         PropertyInfo proInfo = dictPros[proName];
                       //取出 要修改的值
                          object newValue = proInfo.GetValue(model);
                       //批量设置 要修改 对象的 属性
                           foreach (Users user in listModefing)
                        {
                            //为 要修改的对象 的 要修改的属性 设置新的值
                                proInfo.SetValue(user, newValue);
                         }
                     }
                 }
               //一次性 生成sql语句到数据库执行
                 return context.SaveChanges();
    }

    4.查

    4.1普通查

    //查询Name为Kim的全部数据
    var s = context.Users.Where(u => u.Name == "Kim").Select(u => u);

     4.2分页查

    注意:分页查询的时候,一定要先排序,因为其内部是做了一个row_number()的操作。 
    Func<T,bool>是Expression<Func<T,bool>>的缩小,Expression可以理解为就是Lambda的容器

    /// <summary>
    /// 分页查询
     /// </summary>
    /// <typeparam name="T">要操作的数据类型</typeparam>
    /// <param name="whereLambda">Where条件语句</param>
    /// <param name="orderLambda">按什么条件排序</param>
     /// <param name="pageSize">每页都少条数据</param>
    /// <param name="pageIndex">要查询第几页</param>
      /// <returns>返回一个泛型集合</returns>
     static List<T> GetPageList<T>(Func<T, bool> whereLambda, Func<T, object> orderLambda, int pageSize,
      int pageIndex) where T : class
       {
             MyDBEntities context = new MyDBEntities();  
             var list =  context.Set<T>().Where(whereLambda).OrderBy(orderLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);
             return list.ToList();
     }

    一、什么是EF?

       ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。

    EF的运作流程:

                                       

    二、如何创建EF:

       右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。

                                                                               

    三、实现增删改查功能

      方法一

      在DAL层写下增删改查操作的代码
     
    
     
    
    一、什么是EF?
    
       ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。
    
    EF的运作流程:
    
                                       
    
    
    二、如何创建EF:
    
       右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。
    
                                                                               
    三、实现增删改查功能
    
      方法一
    
      在DAL层写下增删改查操作的代码
    [csharp] view plain copy
    <pre name="code" class="csharp"> //EF查询  
            public userinfo GetUser(string username)  
            {  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                   userinfo  user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                    return user;  
                }  
            }  
              
            //修改  
            public userinfo Update(string username,string userpwd)  
            {  
                  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                   // userinfo user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                    userinfo user = entity.userinfo.FirstOrDefault(model => model.username == username);  
                    if (user != null)   
                    {   user.userpassword=userpwd;  
                        entity.SaveChanges();   
                    }  
                      
                    return user;   
                }   
                 
            }  
      
             
      
            //添加  
            public userinfo Add(userinfo user)  
            {  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                    entity.userinfo.Add(  
      
                    new userinfo()  
                    {  
                        username = user.username,  
                        userpwd = user.userpwd  
                    });  
                    if (entity.SaveChanges() > 0)  
                    {  
                        return user;  
                    }  
                    else  
                        return null;  
                }  
            }  
      
            //删除  
            public void Deleted(string  username)  
            {  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                    userinfo user = entity.userinfo.FirstOrDefault(m => m.username == username);  
                    if (user != null)  
                    {  
                       entity.userinfo.Remove(user);  
                    }  
      
                    if (entity.SaveChanges() > 0)  
                    {  
                        //return 0;  
                    }  
      
                }  
            }  
    
     
     方法二:
    
    [csharp] view plain copy
     EF4.0和EF5.0增删改查的写法区别及执行Sql的方法  
      
    EF4.0和EF5.0增删改查的写法区别  
    public T AddEntity(T entity)   
    {  
        //EF4.0的写法    
        添加实体  
        //db.CreateObjectSet<T>().AddObject(entity);  
        //EF5.0的写法  
        db.Entry<T>(entity).State = EntityState.Added;  
        //下面的写法统一  
        db.SaveChanges();  
        return entity;  
    }  
    public bool UpdateEntity(T entity)  
    {  
        //EF4.0的写法  
        //db.CreateObjectSet<T>().Addach(entity);  
        //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);  
        //EF5.0的写法   
       db.Set<T>().Attach(entity);   
       db.Entry<T>(entity).State = EntityState.Modified;   
       return db.SaveChanges() > 0;   
    }  
    public bool DeleteEntity(T entity)  
    {  
        //EF4.0的写法   
       //db.CreateObjectSet<T>().Addach(entity);  
       //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);  
       //EF5.0的写法  
       db.Set<T>().Attach(entity);  
       db.Entry<T>(entity).State = EntityState.Deleted;  
       return db.SaveChanges() > 0;  
    }  
      
    public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)  
    {  
        //EF4.0的写法  
        //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();  
        //EF5.0的写法  
        return db.Set<T>().Where<T>(whereLambda).AsQueryable();  
    }  
    执行SQL语句  
    //EF4.0的写法  
    //int ExcuteSql(string strSql, ObjectParameter[] parameters);  
    return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);  
    //EF5.0的写法  
     int ExcuteSql(string strSql, DbParameter[] parameters);  
    return DEFContextFactory.GetCurrentDbContext().ExecuteSqlCommand(strSql, parameters);  
    
        注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

     方法二:

    一、什么是EF?
    
       ADO.NETEntity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案。ADO.NET Entity Framework 以 Entity DataModel (EDM) 为主,将数据逻  辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有Entity Client,Object Context 以及 LINQ 可以使用。
    
    EF的运作流程:
    
                                       
    
    
    二、如何创建EF:
    
       右击项目——添加——新建项——数据(C#)——选择ADO.NET实体数据模型——点击添加——然后根据实体数据模型向导来一步步的做。
    
                                                                               
    三、实现增删改查功能
    
      方法一
    
      在DAL层写下增删改查操作的代码
    [csharp] view plain copy
    <pre name="code" class="csharp"> //EF查询  
            public userinfo GetUser(string username)  
            {  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                   userinfo  user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                    return user;  
                }  
            }  
              
            //修改  
            public userinfo Update(string username,string userpwd)  
            {  
                  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                   // userinfo user = entity.userinfo.SingleOrDefault(model => model.username == username);  
                    userinfo user = entity.userinfo.FirstOrDefault(model => model.username == username);  
                    if (user != null)   
                    {   user.userpassword=userpwd;  
                        entity.SaveChanges();   
                    }  
                      
                    return user;   
                }   
                 
            }  
      
             
      
            //添加  
            public userinfo Add(userinfo user)  
            {  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                    entity.userinfo.Add(  
      
                    new userinfo()  
                    {  
                        username = user.username,  
                        userpwd = user.userpwd  
                    });  
                    if (entity.SaveChanges() > 0)  
                    {  
                        return user;  
                    }  
                    else  
                        return null;  
                }  
            }  
      
            //删除  
            public void Deleted(string  username)  
            {  
                using (MyShopDBEntities1 entity = new MyShopDBEntities1())  
                {  
                    userinfo user = entity.userinfo.FirstOrDefault(m => m.username == username);  
                    if (user != null)  
                    {  
                       entity.userinfo.Remove(user);  
                    }  
      
                    if (entity.SaveChanges() > 0)  
                    {  
                        //return 0;  
                    }  
      
                }  
            }  
    
     
     方法二:
    
    [csharp] view plain copy
     EF4.0和EF5.0增删改查的写法区别及执行Sql的方法  
      
    EF4.0和EF5.0增删改查的写法区别  
    public T AddEntity(T entity)   
    {  
        //EF4.0的写法    
        添加实体  
        //db.CreateObjectSet<T>().AddObject(entity);  
        //EF5.0的写法  
        db.Entry<T>(entity).State = EntityState.Added;  
        //下面的写法统一  
        db.SaveChanges();  
        return entity;  
    }  
    public bool UpdateEntity(T entity)  
    {  
        //EF4.0的写法  
        //db.CreateObjectSet<T>().Addach(entity);  
        //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);  
        //EF5.0的写法   
       db.Set<T>().Attach(entity);   
       db.Entry<T>(entity).State = EntityState.Modified;   
       return db.SaveChanges() > 0;   
    }  
    public bool DeleteEntity(T entity)  
    {  
        //EF4.0的写法   
       //db.CreateObjectSet<T>().Addach(entity);  
       //db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);  
       //EF5.0的写法  
       db.Set<T>().Attach(entity);  
       db.Entry<T>(entity).State = EntityState.Deleted;  
       return db.SaveChanges() > 0;  
    }  
      
    public IQueryable<T> LoadEntities(Func<T, bool> whereLambda)  
    {  
        //EF4.0的写法  
        //return db.CreateObjectSet<T>().Where<T>(whereLambda).AsQueryable();  
        //EF5.0的写法  
        return db.Set<T>().Where<T>(whereLambda).AsQueryable();  
    }  
    执行SQL语句  
    //EF4.0的写法  
    //int ExcuteSql(string strSql, ObjectParameter[] parameters);  
    return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);  
    //EF5.0的写法  
     int ExcuteSql(string strSql, DbParameter[] parameters);  
    return DEFContextFactory.GetCurrentDbContext().ExecuteSqlCommand(strSql, parameters);  
    
        注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

        注:增删改操作必须使用entity.SaveChanges()进行保存一下。entity.SaveChanges()返回值为数据库里受影响的行数entity.SaveChanges()>0表示操作成功。如entity.SaveChanges()=0则表示操作失败。

  • 相关阅读:
    SpringBoot-10-之初阶整合篇(下)
    09--SpringBoot之初阶整合篇(上)
    07--SpringBoot之数据库JPA(CRUD)
    go 文件操作 io
    类型断言
    多态
    golang interface
    go strcut 封装
    go struct 抽象
    poj-3280 Cheapest Palindrome (dp)
  • 原文地址:https://www.cnblogs.com/BrokenIce/p/6250770.html
Copyright © 2011-2022 走看看